MySQL安全、用戶語句和函數

用戶訪問權限信息存儲在一組規則的MyISAM表中,稱之爲授權表。這些表位於mysql數據庫中,分別是:

  • user :全局層級權限(gobal privileges)
  • db:數據庫層級權限(database-specific privileges)
  • tables_priv:表層級權限(table-specific privilege)
  • columns_priv:列層級權限(column-specific privilege)

其他表提供了用戶訪問和安全的細調(fine-tuning)。可以直接使用標準的SQL語句在這些表中操縱數據,後面接着FLUSH PRIVILEGES語句來更新服務器緩存。不過更推薦專門的SQL語句來管理用戶並設置訪問權

  • CREATE USER:創建用戶
  • GRANT:創建用戶賬戶,爲新用戶賬戶設置權限或者爲現有的用戶設置權限
  • REVOKE:撤銷權限
  • RENAME USER:修改用戶名
  • SET PASSWORD:修改密碼
  • DROP USER:刪除用戶賬戶

語句和函數

與安全和用戶有關的語句列表
CREATE USER、DROP USER、FLUSH、GRANT、RENAME USER、RESET、REVOKE、SE PASSWORD、SHOW GRANTS、SHOW PRIVILEGES

與函數有關的語句列表
AES_DECRYPT()、AES_ENCRYPT()、CURRENT_USER()、DECODE()、DES_DECRYPT()、DES_ENCRYPT()、ENCODE()、ENCRYPT()、MD5()、OLD_PASSWORD()、PASSWORD()、SESSION_USER()、SHA()、SHA1()、SYSTEM_USER()、USER()

CREATE USER

CREATE USER 'user'[@'host'] [IDENTIFIED BY [PASSWORD] 'password'][, ...]

host使用localhost或者127.0.0.1可以本地訪問MySQL,使用通配符%允許客戶端指定用戶從任意主機連接。
用戶密碼位於IDENTIFIED BY子句之後,並在引號中用存文本給出。不必使用PASSWORD()對密碼加密;密碼加密工作會自動完成。如果打算把密碼設置成哈希值,使用IDENTIFIED BY PASSWORD子句,如果沒有指定password子句,密碼爲空。後續使用SET PASSWORD語句來設置密碼。

使用逗號分隔的列表指定多個用戶賬戶。

DROP USER

DROP USER 'user'@'host'

從MySQL5.0.2版本開始,這條語句將刪除用戶賬戶和來自所有授權表的特權。
一些用戶可能不止有一個賬戶(用戶和主機的組合)。爲了確保這一點,應該檢查mysql.user表:

select user,host from mysql.user where user like 'sss';

5.0.2版本之前,drop user並不刪除具有全局權限的用戶。爲了撤銷用戶賬戶的權限,在使用drop user之前,使用revoke語句

revoke  all on *.* from ''@'';
drop user 'use'@'host'

all選項用以確保刪除所有權限。*.* 涵蓋了所有數據庫中的所有表。
在mysdql4.1.1版本之前,必須使用如下語句而不是drop user語句:

delete from mysql.user where user='' and host = '';
flush privileges;

必須使用flush privileges才能令前面的delete 語句失效。而在drop user語句之後,這個語句並非必須的。

FLUSH語法

FLUSH [LOCAL|NO_WRITE_TO_BINLOG] option[,…]
選項:
DES_KEY_FILE,HOSTS,LOGS,MASTER,PRIVILEGE,QUERY_CACHE,STATUS,TABLE,TABLES,TABLES WITHOUT READ LOCK,USER_RESOURCES

使用FLUSH語句可以清楚並且重載MySQL的臨時緩存。想要執行FLUSH命令,必須擁有RELOAD權限。爲了防止該語句攜入二進制日誌文件,可以使用NO_WRITE_TO_BINLOG標記或者其別名LOCAL。
從5.1版本開始,FLUSH不能用在存儲函數和觸發器中,但是可以用在存儲過程之中。

GRANT 語法

GRANT
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    TO user [auth_option] [, user [auth_option]] ...
    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
    [WITH {GRANT OPTION | resource_option} ...]


GRANT PROXY ON user
    TO user [, user] ...
    [WITH GRANT OPTION]

object_type: {
    TABLE
  | FUNCTION
  | PROCEDURE
}

priv_level: {
    *
  | *.*
  | db_name.*
  | db_name.tbl_name
  | tbl_name
  | db_name.routine_name
}

user:
    (see Section 6.2.4, “Specifying Account Names”)

auth_option: {
    IDENTIFIED BY 'auth_string'
  | IDENTIFIED WITH auth_plugin
  | IDENTIFIED WITH auth_plugin BY 'auth_string'
  | IDENTIFIED WITH auth_plugin AS 'auth_string'
  | IDENTIFIED BY PASSWORD 'auth_string'
}

tls_option: {
    SSL
  | X509
  | CIPHER 'cipher'
  | ISSUER 'issuer'
  | SUBJECT 'subject'
}

resource_option: {
  | MAX_QUERIES_PER_HOUR count
  | MAX_UPDATES_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章