MySQL的用戶管理
用戶賬號格式
username@hostname
查看幫助
MySQL > help contents; MySQL > help account management;
賬號管理命令(此時權限很有限)
create user drop user rename user set password
權限管理命令:
grant revoke
查看創建用戶命令幫助
MySQL> help create user; CREATE USER username@hostname [ IDENTIFIED BY [PASSWORD] 'password' ] 主機也可以使用通配符:testuser@'172.16.100.1__'(172.16.100.100-172.16.100.199) (兩個下劃線) 還可以使用%:testuser@'172.16.%.%' 查看用戶能夠使用的權限:show grants for username@'hostname'
重命名
MySQL > help rename user RENAME USER old_user TO new_user [, old_user TO new_user] ... mysql > RENAME USER 'jeffrey'@'localhost' TO 'jeff'@'127.0.0.1';
爲用戶設置密碼
MySQL > help set password; SET PASSWORD [FOR user] = { PASSWORD('cleartext password') } MySQL > set password for testuser@'172.16.%.%' = password('123456'); 調用password函數
MySQL的權限類型:
庫級別
表級別
字段級別
管理類
程序類(存儲過程,觸發器,存儲函數,時間調度器)
管理類權限
create temporary tables 臨時表
create user
file 允許用戶讀或者寫某些文件
lock tables 添加顯式鎖
process:查看用戶的線程
reload:相當於執行flush和reset
replication client 查詢有哪些複製客戶端
replication slave 賦予用戶複製權限
show databases
shutdown
super
數據庫訪問權限(庫級別和表級別)
alter:modify tables with alter tables
alter routine 修改存儲歷程
create
create routine 存儲過程,存儲函數
create view
delete
drop
execute 是否能夠執行存儲過程,或存儲函數
grant option 將自己的權限複製給別的用戶
index 索引
show view
數據操作類權限(表級別)
select
insert
update
delete
字段級別:
select(col1,....)
update(col1,....)
insert(col1,....)
所有權限
ALL [privileges]
查看幫助
MySQL > help GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level TO user_specification [, user_specification] ... [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}] [WITH with_option ...] object_type:(默認爲表) TABLE | FUNCTION | PROCEDURE priv_level: * | *.* | db_name.* | db_name.tbl_name | tbl_name | db_name.routine_name user_specification: user [ IDENTIFIED BY [PASSWORD] 'password' | IDENTIFIED WITH auth_plugin [AS 'auth_string'] ] //可以實現授權並添加密碼 ssl_option: SSL ... with_option: GRANT OPTION 轉贈給別人 | MAX_QUERIES_PER_HOUR count 每小時允許執行的最大查詢次數 | MAX_UPDATES_PER_HOUR count 每小時允許執行的最大更新次數 | MAX_CONNECTIONS_PER_HOUR count 每小時允許執行的最大連接次數 | MAX_USER_CONNECTIONS count 使用同一個賬號可以同時連接的次數
實例
給testuser用戶授權 MySQL > grant create on testdb.* to testuser@'192.168.139.1__';
此時testuser只能創建testdb庫
查看自己的權限 MySQL > show grants for testuser@'192.168.139.1__';
此時可以在該數據庫下創建表,但是由於沒有select和drop權限,
所以不能查看錶數據及結構,不能刪除表
給testuser用戶刪除表的權限 MySQL > grant drop on testdb.* to testuser@'192.168.139.1__'; 查看權限 MySQL > show grants for testuser@'192.168.139.1__';
給testuser用戶增、刪、查、改權限 MySQL > grant select,insert,update,delete on testdb.* to testuser@'192.168.139.1__'; 查看權限 MySQL > show grants for testuser@'192.168.139.1__';
注意:要想創建庫應該對所有表都有權限
收回授權
MySQL > help REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level FROM user [, user] ... REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ... REVOKE PROXY ON user FROM user [, user] ...
例子:
MySQL > revoke insert,select on testdb.* from testuser@'192.168.139.1__'; 查看權限 MySQL > show grants for testuser@'192.168.139.1__';
幾個跟用戶授權相關的表:(在mysql庫中)
db:庫級別的權限 host:主機級別權限,已廢棄 tables_priv:表級別權限 columns_priv:列級別的權限 procs_priv:存儲過程和存儲函數相關的權限 proxies_priv:代理用戶權限·
MySQL的每一次操作幾乎都要涉及權限管理檢查,所以把授權表載入內存中(爲了提升速度)