+ $sql = sprintf('SET PASSWORD FOR \'%s\'@\'%%\'=PASSWORD(\'%s\')',
+ mysql_escape_string($this->getUsername()),
+ mysql_escape_string($pwd));
+ DBSet($sql);
+ }
+ function signup($pwd) {
+ $this->pass = $pwd;
+ $arr['Password'] = base64_encode($pwd);
+ $arr['bEnabled'] = 1;
+ $arr['dSignup'] = 'NOW()';
+ $sql = sprintf("UPDATE User %s WHERE UserId = '%s'",
+ buildSQLSet($arr), mysql_escape_string($this->getUserId()));
+ DBUpdate($sql);
+
+ $this->setUsage();
+ $this->setAccess();
+ }
+ function setUsage($yes=true) {
+ $verb = $yes?'GRANT':'REVOKE';
+ $prep = $yes?'TO':'FROM';
+ $suffix = $yes?sprintf("IDENTIFIED BY '%s'",mysql_escape_string($this->pass)):'';
+ $sql = sprintf("%s USAGE ON * . * %s '%s'@'%s' %s",
+ mysql_escape_string($verb),
+ mysql_escape_string($prep),
+ mysql_escape_string($this->getUsername()),
+ '%',
+ $suffix);
+ DBGrant($sql);
+ }
+ function setAccess($db=null,$yes=true) {
+ $verb = $yes?'GRANT':'REVOKE';
+ $prep = $yes?'TO':'FROM';
+ if (is_null($db)) {
+ $dbs = $this->getDBList();
+ } else {
+ $dbs[] = array('Name'=>$db);
+ }
+ foreach($dbs as $db) {
+ $name = $db['Name'];
+ $sql = sprintf("%s ALL PRIVILEGES ON `%s` . * %s '%s'@'%s'",
+ mysql_escape_string($verb),
+ mysql_escape_string($name),
+ mysql_escape_string($prep),
+ mysql_escape_string($this->getUsername()),
+ '%');
+ DBGrant($sql);
+ }
+ }
+ function getDBList() {
+ if (isset($this->dblist)) {
+ return $this->dblist;
+ } else {
+ // LEFT JOIN DBQuota ON DBQuota.DatabaseId = DBOwner.DatabaseId
+ $sql = sprintf("SELECT *
+ FROM DBOwner
+ INNER JOIN DB ON DB.DatabaseId = DBOwner.DatabaseId
+ INNER JOIN DBQuota ON DBQuota.DatabaseId = DBOwner.DatabaseId
+ WHERE DBOwner.UserId = '%s' AND DB.bEnabled=1",
+ mysql_escape_string($this->getUserId()));
+// $r = fetchRows(DBSelect($sql),'DatabaseId');
+ $r = fetchRows(DBSelect($sql),'Name');
+ ksort($r);
+ return $r;
+ }
+ }
+ function addDB($name) {
+ if (in_array($name, $this->getDBList())) return false;
+ if (!addDB($name, $this->getUserId())) return false;
+ $this->setAccess($name);
+ return true;
+ }
+ function delDB($name) {
+ if (!in_array($name, array_keys($this->getDBList()))) return false;
+ if (!delDB($name)) return false;//, $this->getUserId())) return false;
+ $this->setAccess($name,false);
+ return true;
+ }