mysql使用者和許可權

花花蘑菇發表於2016-10-12
使用者的建立
方法一:
create user lxm;
set password for lxm=PASSWORD('123456');
alter user lxm password expire; 設定使用者密碼過期。
select user, host, password from mysql.user;  查詢賬號資訊
方法二:
在授權時會默然建立使用者
grant select on test.table1 to lxm@192.168.2.154 identified by '123456';
方法三:
直接修改user表,修改完後記得flush privileges。
insert into mysql.user(host,user,password,ssl_cipher,x509_issuer,x509_subject) values ('192.168.2.154','lxm','123456','','','');
update mysql.user set password=password('lxm') where user='lxm' and host='%';    修改使用者密碼

使用者的刪除:
drop user lxm@192.168.2.154, lxm2@192.168.2.154, lxm3@192.168.2.154;  可以一次刪除多個使用者
drop user不會自動中止已連線的使用者會話。
=========================================================================
許可權
mysql中許可權的粒度由粗到細分別是全域性,資料庫,表,列,程式。可以用一句話來概括:分配某個使用者從某臺機器連線進來訪問某個資料庫下的某張表的某個列的某部分記錄的許可權。
1、全域性級別
與全域性相關的許可權資訊記錄在mysql.user表中。這個全域性許可權不是指擁有所有的許可權,它具體指的是擁有該MYSQL伺服器所有資料庫物件的許可權。
2、資料庫級別
與資料庫級別的許可權資訊記錄在mysql.db表中。
3、表物件級別
表物件的授權資訊記錄在mysql.tables_priv字典表中。
4、列級別
列級許可權是mysql許可權體系中的最細粒度。許可權資訊記錄在mysql.column_priv表中。
grant select (col1) on test.table1 to lxm;  授予使用者lxm查詢test.table1表中col1列的許可權。
grant insert (col1) on test.table1 to lxm;  授予使用者lxm向test.table1表中col1列新增值的許可權。
5、程式
mysql中的程式指procedure和function兩類物件。對已存在的程式,可以授予執行(EXECUTE),修改(ALTER ROUTINE),授予(GRANT)許可權。這些許可權資訊記錄在表mysql.procs_priv中。

查詢使用者許可權:
show grants for lxm@’192.168.2.154;  查詢使用者lxm所擁有的許可權
show grants; 查詢當前使用者的所有許可權

回收許可權:
revoke select on test.table1 from lxm@192.168.2.154;
revoke all privileges,grant option from user;   回收使用者的所有許可權

許可權變更何時生效:
如果是用mysql提供的命令來執行修改,比如GRANT,REVOKE,SET PASSWORD,RENAME USER,則許可權變更立即生效。
如果是手動修改字典表的方式,比如INSERT,UPDATE,DELETE,則需要重啟mysql服務,或者手動觸發授權表(GRANT TABLES)重新裝載到記憶體中,即flush privileges。
許可權變更對客戶端的影響:
表或者列粒度的許可權改變將在客戶端執行下一次操作時生效。
資料庫級別的許可權將在客戶端切換資料庫時生效。
全域性許可權和密碼修改,當客戶端下一次連線時生效。

在LINUX/UNIX系統下,使用mysql命令列工具執行的所有操作,都會被記錄到一個名為.mysql_history的檔案中。該檔案預設儲存在當前使用者的根目錄下。可以透過修改引數MYSQL_HISTFILE來更改路徑。

許可權型別列表:
create user  可以執行create user,drop user,rename user,revoke all privileges語句
create    建立資料庫或者表物件    *擁有create許可權的使用者只能建立和檢視自己新建的資料庫或表物件,而無法刪除。
create view  可以建立/修改檢視
select   查詢
insert  執行insert語句
update   允許執行update操作
delete  可以執行delete語句
drop  可以刪除表/檢視/資料庫
alter      執行alter table操作

index  建立或者刪除索引
create tablespace  建立,修改或者刪除表空間以及日誌檔案組
create temporary tables  透過執行create temporary table語句建立臨時表
lock tables  對擁有select許可權的表物件執行lock tables

trigger  允許建立或者刪除觸發器
create routine  建立儲存過程和函式
alter routine   修改或者刪除儲存過程和函式
execute  允許使用者可以執行儲存程式

replication client  允許使用者連線複製環境中的master/slave
replication slave   允許複製環境的slave端從master端讀取資料

grant option  允許將授予的許可權再由該使用者授予給其他使用者
all privileges  授予所有除grant option外的許可權
usage  指沒有許可權(no privileges),但是還是可以登入的。該許可權是預設給予的,無法被回收。

event 允許使用event物件
file   允許使用者讀寫檔案
proxy   可以使用proxy

注:all privileges和grant option兩類許可權比較特殊,在授予和回收時都不能與其他許可權同時操作。

max_queries_per_hour  使用者每小時執行的查詢語句數量
max_update_per_hour  使用者每小時執行的更新語句數量
max_connections_per_hour   使用者每小時可以連線的最大次數
max_user_connections   使用者同時連線伺服器的數量

其他:
在表級物件你可以賦予的許可權有select、insert、update、delete、create、drop、grant option、index、以及alter。
execution、file、process、reload、replication client、replication slave,show databases,shutdown,以及super這些許可權都是管理許可權,只能被全域性賦予,即用on *.*的方式。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28497416/viewspace-2126174/,如需轉載,請註明出處,否則將追究法律責任。

相關文章