/** * @param Account $account */ protected function dropDatabase(Account $account) { // User current users credentials to see available databases $conn = $this->connect($account->getDatabase()); $databases = $conn->fetchArray("SHOW DATABASES WHERE `Database` = '{$account->getDatabase()}';"); if (is_array($databases) && in_array($account->getDatabase(), $databases)) { $privileges = $conn->fetchAll("\n SELECT\n *\n FROM information_schema.schema_privileges\n WHERE\n TABLE_SCHEMA = '{$account->getDatabase()}'\n AND SUBSTR(SUBSTRING_INDEX(GRANTEE, '\\'@', 1), 2) != '{$account->getUser()}';\n "); // Drop only if no other users have access to the db if (count($privileges) == 0) { $conn->exec("DROP DATABASE {$account->getDatabase()};"); } } $conn->close(); }
/** * @param Account $account * @throws DBALException * @throws InvalidCredentialsException */ public function addAccount(Account $account) { $this->logDebug("Adding Redshift account {$account->getUser()}", $account->getDebugData()); $conn = $this->connect($account->getDatabase()); // Reuse schema if exists $schemas = $conn->fetchArray("SELECT nspname FROM pg_namespace WHERE nspname = '{$account->getSchema()}';"); if (!is_array($schemas) || !in_array($account->getSchema(), $schemas)) { $conn->exec("CREATE SCHEMA \"{$account->getSchema()}\";"); } // reuse username if exists $users = $conn->fetchArray("SELECT * FROM pg_user WHERE usename = '{$account->getUser()}';"); if (!is_array($users) || !in_array($account->getUser(), $users)) { $conn->exec("CREATE USER \"{$account->getUser()}\" WITH PASSWORD '{$account->getPassword()}';"); } else { $conn->exec("ALTER USER \"{$account->getUser()}\" PASSWORD '{$account->getPassword()}';"); } $conn->close(); }
/** * @param Account $account */ protected function dropDatabase(Account $account) { // User current users credentials to see available databases $conn = $this->connect($account->getDatabase()); $databases = $conn->fetchArray("SHOW DATABASES WHERE `Database` = '{$account->getDatabase()}';"); if (is_array($databases) && in_array($account->getDatabase(), $databases)) { $conn->exec("DROP DATABASE {$account->getDatabase()};"); } $conn->close(); }