Beispiel #1
0
 /**
  * @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();
 }