用戶和權限管理:
語法
grant 權限 on 數據庫.數據表 to '用戶' @ '主機名';
例:給 xiaogang 分配所有的權限
grant all on *.* to 'xiaogang'@'%';
這個時候 xiaogang 就擁有了 所有權限了
權限列表
權限 |
說明 |
舉例 |
usage |
連接(登陸)權限,建立一個用戶,就會自動授予其usage權限(默認授予)。 |
mysql> grant usage on *.* to 'root′@'localhost' identified by '123'; |
該權限只能用於數據庫登陸,不能執行任何操作;且usage權限不能被回收,也即REVOKE用戶並不能刪除用戶。 |
||
file |
擁有file權限纔可以執行 select ..into outfile和load data infile…操作,但是不要把file, process, super權限授予管理員以外的賬號,這樣存在嚴重的安全隱患。 |
mysql> grant file on *.* to root@localhost; |
mysql> load data infile '/home/mysql/pet.txt' into table pet; |
||
super |
這個權限允許用戶終止任何查詢;修改全局變量的SET語句;使用CHANGE MASTER,PURGE MASTER LOGS。 |
mysql> grant super on *.* to root@localhost; |
mysql> purge master logs before 'mysql-bin.000006′; |
||
select |
必須有select的權限,纔可以使用select table |
mysql> grant select on pyt.* to 'root′@'localhost'; |
mysql> select * from shop; |
||
insert |
必須有insert的權限,纔可以使用insert into ….. values…. |
mysql> grant insert on pyt.* to 'root′@'localhost'; |
mysql> insert into shop(name) values('aa'); |
||
update |
必須有update的權限,纔可以使用update table |
mysql> update shop set price=3.5 where article=0001 and dealer='A'; |
delete |
必須有delete的權限,纔可以使用delete from ….where….(刪除表中的記錄) |
mysql> grant delete on pyt.* to 'root′@'localhost'; |
mysql> delete from table where id=1; |
||
alter |
必須有alter的權限,纔可以使用alter table |
mysql> alter table shop modify dealer char(15); |
alter routine |
必須具有alter routine的權限,纔可以使用{alter |drop} {procedure|function} |
mysql>grant alter routine on pyt.* to 'root′@' localhost ‘; |
mysql> drop procedure pro_shop; |
||
Query OK, 0 rows affected (0.00 sec) |
||
create |
必須有create的權限,纔可以使用create table |
mysql> grant create on pyt.* to 'root′@'localhost'; |
drop |
必須有drop的權限,纔可以刪除庫、表、索引、視圖等 |
mysql> drop database db_name; |
mysql> drop table tab_name; |
||
mysql> drop view vi_name; |
||
mysql> drop index in_name; |
||
create routine |
必須具有create routine的權限,纔可以使用{create |alter|drop} {procedure|function} |
mysql> grant create routine on pyt.* to 'root′@'localhost'; |
當授予create routine時,自動授予EXECUTE, ALTER ROUTINE權限給它的創建者: |
||
create temporary tables |
(注意這裏是tables,不是table) |
必須有create temporary tables的權限,纔可以使用create temporary tables. |
mysql> grant create temporary tables on pyt.* to 'root′@'localhost'; |
||
[mysql@mydev ~]$ mysql -h localhost -u root -p pyt |
||
mysql> create temporary table tt1(id int); |
||
create view |
必須有create view的權限,纔可以使用create view |
mysql> grant create view on pyt.* to 'root′@'localhost'; |
mysql> create view v_shop as select price from shop; |
||
create user |
要使用CREATE USER,必須擁有mysql數據庫的全局CREATE USER權限,或擁有INSERT權限。 |
mysql> grant create user on *.* to 'root′@'localhost'; |
或:mysql> grant insert on *.* to root@localhost; |
||
show database |
通過show database只能看到你擁有的某些權限的數據庫,除非你擁有全局SHOW DATABASES權限。 |
mysql> show databases; |
對於root@localhost用戶來說,沒有對mysql數據庫的權限,所以以此身份登陸查詢時,無法看到mysql數據庫: |
||
show view |
必須擁有show view權限,才能執行show create view |
mysql> show create view name; |
index |
必須擁有index權限,才能執行[create |drop] index |
mysql> grant index on pyt.* to root@localhost; |
mysql> create index ix_shop on shop(article); |
||
mysql> drop index ix_shop on shop; |
||
excute |
執行存在的Functions,Procedures |
mysql> call pro_shoroot(0001,@a); |
event |
event的使用頻率較低建議使用root用戶進行創建和維護。 |
mysql> show global variables like 'event_scheduler'; |
要使event起作用,MySQL的常量GLOBAL event_scheduler必須爲on或者是1 |
||
lock tables |
必須擁有lock tables權限,纔可以使用lock tables |
mysql> grant lock tables on pyt.* to root@localhost; |
mysql> lock tables a1 read; |
||
mysql> unlock tables; |
||
references |
有了REFERENCES權限,用戶就可以將其它表的一個字段作爲某一個表的外鍵約束。 |
|
reload |
必須擁有reload權限,纔可以執行flush [tables | logs | privileges] |
mysql> grant reload on pyt.* to root@localhost; |
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES |
||
mysql> grant reload on *.* to 'root′@'localhost'; |
||
Query OK, 0 rows affected (0.00 sec) |
||
mysql> flush tables; |
||
replication client |
擁有此權限可以查詢master server、slave server狀態。 |
mysql> grant Replication client on *.* to root@localhost; |
或:mysql> grant super on *.* to root@localhost; |
||
mysql> show master status; |
||
replication slave |
擁有此權限可以查看從服務器,從主服務器讀取二進制日誌。 |
mysql> grant replication slave on *.* to root@localhost; |
mysql> show slave hosts; |
||
Empty set (0.00 sec) |
||
mysql>show binlog events; |
||
Shutdown |
關閉mysql權限 |
[mysql@mydev ~]$ mysqladmin shutdown |
grant option |
擁有grant option,就可以將自己擁有的權限授予其他用戶(僅限於自己已經擁有的權限) |
mysql> grant Grant option on pyt.* to root@localhost; |
mysql> grant select on pyt.* to p2@localhost; |
||
process |
通過這個權限,用戶可以執行SHOW PROCESSLIST和KILL命令。默認情況下,每個用戶都可以執行SHOW PROCESSLIST命令,但是隻能查詢本用戶的進程。 |
mysql> show processlist; |
all privileges |
所有權限。with grant option 可以連帶授權 |
mysql> grant all privileges on pyt.* to root@localhost with grant option; |
· 管理權限(如 super, process, file等)不能夠指定某個數據庫,on後面必須跟 *.*
· 有人會問truncate權限呢,其實truncate權限就是create+drop,這點需要注意
查看用戶授權信息
mysql> show grants for bzfys;
+-------------------------------------------------------------------------------------------------------+
| Grants for bzfys@% |
+-------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO bzfys@'%' IDENTIFIED BY PASSWORD '*A399693A49F7EC7C548D0FC376FA52AD293A552F' |
+-------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
一般情況賦予的權限
用戶管理
mysql>use mysql;
一、查看
mysql> select host,user,password from user ;
二、創建
mysql> create user bzfys IDENTIFIED by 'xxxxx'; //identified by 會將純文本密碼加密作爲散列值存儲
三、修改
mysql>rename user bzfys to buzaifengyaosha;//mysql 5之後可以使用,之前需要使用update 更新user表
四、刪除
mysql>drop user buzaifengyaosha; //mysql5之前刪除用戶時必須先使用revoke 刪除用戶權限,然後刪除用戶,mysql5之後drop 命令可以刪除用戶的同時刪除用戶的相關權限
五、更改密碼(如果找回root密碼必須用這種方式)
mysql> set password for bzfys =password('xxxxxx');
mysql> update mysql.user set password=password('xxxx') where user=’bzfys’;5.8以後需要修改的列爲authentication_string列update mysql.user set authentication_string=password('xxxx') where user=’bzfys’
六、查看用戶權限
mysql> show grants for bzfys;
七、賦予權限
mysql> grant select on bzfys_db.* to bzfys;
回收權限
mysql> revoke select on bzfys_db.* from bzfys; //如果權限不存在會報錯
上面的命令也可使用多個權限同時賦予和回收,權限之間使用逗號分隔
mysql> grant select,update,delete ,insert on bzfys_db.* to bzfys;
如果想立即看到結果使用
flush privileges ;
命令更新
設置權限時必須給出一下信息
1,要授予的權限
2,被授予訪問權限的數據庫或表
3,用戶名
grant和revoke可以在幾個層次上控制訪問權限
1,整個服務器,使用 grant ALL 和revoke ALL
2,整個數據庫,使用on database.*
3,特點表,使用on database.table
4,特定的列
5,特定的存儲過程
user表中host列的值的意義
% 匹配所有主機
localhost localhost不會被解析成IP地址,直接通過UNIXsocket連接
127.0.0.1 會通過TCP/IP協議連接,並且只能在本機訪問;
::1 ::1就是兼容支持ipv6的,表示同ipv4的127.0.0.1
grant 普通數據用戶,查詢、插入、更新、刪除 數據庫中所有表數據的權利。
grant select on testdb.* to common_user@’%’
grant insert on testdb.* to common_user@’%’
grant update on testdb.* to common_user@’%’
grant delete on testdb.* to common_user@’%’
或者,用一條 MySQL 命令來替代:
grant select, insert, update, delete on testdb.* to common_user@’%’
9>.grant 數據庫開發人員,創建表、索引、視圖、存儲過程、函數。。。等權限。
grant 創建、修改、刪除 MySQL 數據表結構權限。
grant create on testdb.* to developer@’192.168.0.%’;
grant alter on testdb.* to developer@’192.168.0.%’;
grant drop on testdb.* to developer@’192.168.0.%’;
grant 操作 MySQL 外鍵權限。
grant references on testdb.* to developer@’192.168.0.%’;
grant 操作 MySQL 臨時表權限。
grant create temporary tables on testdb.* to developer@’192.168.0.%’;
grant 操作 MySQL 索引權限。
grant index on testdb.* to developer@’192.168.0.%’;
grant 操作 MySQL 視圖、查看視圖源代碼 權限。
grant create view on testdb.* to developer@’192.168.0.%’;
grant show view on testdb.* to developer@’192.168.0.%’;
grant 操作 MySQL 存儲過程、函數 權限。
grant create routine on testdb.* to developer@’192.168.0.%’; -- now, can show procedure status
grant alter routine on testdb.* to developer@’192.168.0.%’; -- now, you can drop a procedure
grant execute on testdb.* to developer@’192.168.0.%’;
10>.grant 普通 DBA 管理某個 MySQL 數據庫的權限。
grant all privileges on testdb to dba@’localhost’
其中,關鍵字 “privileges” 可以省略。
11>.grant 高級 DBA 管理 MySQL 中所有數據庫的權限。
grant all on *.* to dba@’localhost’
12>.MySQL grant 權限,分別可以作用在多個層次上。
1. grant 作用在整個 MySQL 服務器上:
grant select on *.* to dba@localhost; -- dba 可以查詢 MySQL 中所有數據庫中的表。
grant all on *.* to dba@localhost; -- dba 可以管理 MySQL 中的所有數據庫
2. grant 作用在單個數據庫上:
grant select on testdb.* to dba@localhost; -- dba 可以查詢 testdb 中的表。
3. grant 作用在單個數據表上:
grant select, insert, update, delete on testdb.orders to dba@localhost;
4. grant 作用在表中的列上:
grant select(id, se, rank) on testdb.apache_log to dba@localhost;
5. grant 作用在存儲過程、函數上:
grant execute on procedure testdb.pr_add to ’dba’@’localhost’
grant execute on function testdb.fn_add to ’dba’@’localhost’
注意:修改完權限以後 一定要刷新服務,或者重啓服務,刷新服務用:FLUSH PRIVILEGES。
grant create routine, alter routine, execute ON `blacklist`.* TO 'blacklist'@'%';
create routine創建存儲過程
alter routine, 修改存儲過程
execute:執行存儲過程