MySQL的权限管理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL的权限管理相关的知识,希望对你有一定的参考价值。
权限管理的概念:
MySQL权限管理主要是对登陆mysql的用户进行验证,合理的权限规划会提高MySQL服务器的安全。
1,验证主机,用户名,密码 (从哪里来)
2,验证操作权限,比如:select,update,delete (可以做什么)
MySQL的各种权限:
账户权限信息存储在MySQL的user,db,host,table_priv,columns_priv和procs_priv表中,启动数据库,会读入内存
mysql权限表的验证过程为:
1.先从user表中的Host,User,Password这3个字段中判断连接的ip、用户名、密码是否存在,存在则通过验证。
2.通过身份认证后,进行权限分配,按照user,db,tables_priv,columns_priv的顺序进行验证。
即先检查全局权限表 user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db, tables_priv,columns_priv;
如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;
如果db中为N,则检 查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。
1,CREATE和DROP权限,可以创建新数据库和表,或删除已有数据库和表,
如果将mysql数据库中的DROP权限授权予某用户,用户可以删掉MySQL访问权限保存的数据库
2、SELECT、INSERT、UPDATE和DELETE权限允许在一个数据库现有的表上实施操作
3、SELECT权限只有在它们真正从一个表中检索行时才被用到
4,INDEX权限允许创建或删除索引,INDEX适用已有表。
如果具有某个表的CREATE权限,可以在CREATE TABLE语句中包含索引定义
5,ALTER权限,可以使用ALTER TABLE来更改表的结构和重新命名表
6,CREATE ROUTINE权限来创建保存的程序(函数和程序),ALTER ROUTINE权限用来更改和删除保存的程序,EXECUTE权限用来执行保存的程序
mysqladmin命令
1,reload命令告诉服务器将授权表重新读入内存
2,flush-privileges是reload的同义词
3,refresh命令清空所有表并关闭/打开记录文件
shutdown命令关闭服务器
processlist命令显示在服务器内执行的线程的信息。
kill命令杀死服务器线程。用户总是能显示或杀死自己的线程,但是需要process权限来显示或者杀死其他用户和super权限启动的线程
授权:
1,全局层级
权限存储在mysql.user表中,GRANT ALL ON *.* 和REVOKE ALL ON *.* 只授予和撤销全局权限
2,数据层层级
权限存储在mysql.db和mysql.host表中。GRANT ALL ON db_name.和REVOKE ALL ON db_name.*只授予和撤销数据库权限
3,表层级
权限存储在mysql.tables_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限
4,列层级
存储在mysql.columns_priv表中。当使用REVOKE时,必须指定与被授权列相同的列
5,子程序层级
GRANT的语法:
GRANT priv_type [(columns)] [,priv_type [(columns)]] ...
ON [object_type] table1,table2,...,tablen
TO user [IDENTIFIED BY [PASSWORD] ‘password‘]
[,USER [IDENTIFIED BY [PASSWORD] ‘password‘]] ...
[WITH GRANT OPTION]
object_type = TABLE | FUNCTION | PROCEDURE
GRANT OPTION 取值:
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
例子:
使用GRANT语句创建一个新的用户grantUser,密码为“grantpwd”。用户grantUser对所有的数据有查询、插入权限,并授予GRANT权限。
mysql> GRANT select,insert ON *.* TO ‘grantUser‘@‘localhost‘ identified by ‘grantpwd‘ with grant option;
Query OK, 0 rows affected (0.00 sec)
mysql> select host,user,select_priv,insert_priv,grant_priv from mysql.user where user=‘grantUser‘;
+-----------+-----------+-------------+-------------+------------+
| host | user | select_priv | insert_priv | grant_priv |
+-----------+-----------+-------------+-------------+------------+
| % | grantUser | Y | Y | N |
| localhost | grantUser | Y | Y | Y |
+-----------+-----------+-------------+-------------+------------+
收回权限
第一种语法是收回所有用户的所有权限,用于取消对已命名的用户的所有全局层级,数据库层级,表层级和列层级的权限
REVOKE ALL PRIVILEGES,GRANT OPTION FROM ‘user‘@‘host‘ [,‘user‘@‘host‘ ...]
另一种长格式的REVOKE语句
REVOKE priv_type [(columns)] [,priv_type [(columns)]] ...
ON table1,table2,...,tablen
FROM ‘user‘@‘host‘ [,‘user‘@‘host‘ ...]
例子:
使用REVOKE语句取消用户testUser的更新权限。
mysql> grant update on *.* to ‘testUser‘@‘%‘ identified by ‘wpf926,.‘;
Query OK, 0 rows affected (0.00 sec)
mysql> select update_priv,user,host from mysql.user where user=‘testUser‘;
+-------------+----------+-----------+
| update_priv | user | host |
+-------------+----------+-----------+
| Y | testUser | localhost |
| Y | testUser | % |
+-------------+----------+-----------+
2 rows in set (0.00 sec)
mysql> revoke update on *.* from ‘testUser‘@‘%‘;
Query OK, 0 rows affected (0.00 sec)
mysql> select update_priv,user,host from mysql.user where user=‘testUser‘;
+-------------+----------+-----------+
| update_priv | user | host |
+-------------+----------+-----------+
| Y | testUser | localhost |
| N | testUser | % |
+-------------+----------+-----------+
2 rows in set (0.00 sec)
mysql> revoke update on *.* from ‘testUser‘@‘localhost‘;
Query OK, 0 rows affected (0.00 sec)
mysql> select update_priv,user,host from mysql.user where user=‘testUser‘;
+-------------+----------+-----------+
| update_priv | user | host |
+-------------+----------+-----------+
| N | testUser | localhost |
| N | testUser | % |
+-------------+----------+-----------+
2 rows in set (0.00 sec)
查看权限
show grant查看账户信息的语法:
show grant for ‘user’@‘host’;
例子:
使用show grants语句查询用户testUser的权限
mysql> show grants for ‘testUser‘@‘%‘;
+--------------------------------------------------------------------------------+
| Grants for [email protected]% |
+--------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO ‘testUser‘@‘%‘ IDENTIFIED BY PASSWORD ‘64c4cd3a456ed50e‘ |
+--------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> show grants for ‘testUser‘@‘localhost‘;
+-----------------------------------------------------------------------------------------+
| Grants for [email protected] |
+-----------------------------------------------------------------------------------------+
| GRANT SELECT ON *.* TO ‘testUser‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘565491d704013245‘ |
+-----------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
以上是关于MySQL的权限管理的主要内容,如果未能解决你的问题,请参考以下文章