MySQL的权限内容

1、概述 
MySQL权限系统的主要功能是证实连接到一台给定主机的用户,并且赋予该用户在数据库上的各种权限,一般生产环境中 的程序账号只需要SELECT、INSERT、UPDATE和DELETE权限即可。 MySQL根据访问控制列表(ACL)对所有连接、查询和用户尝试执行的其他操作进行安全管理。MySQL将验证用户的3项 信息:用户名、密码、主机来源。对通过验证的用户再确认其他的访问权限,以进行访问控制。  
权限可以分为两类:系统权限和对象选项。 系统权限允许执行一些特定的功能,如关闭数据库、终止进程、显示数据库列表、查看当前执行的查询等。对象权限是指 对一些特殊的对象(表、列、视图、数据库)的访问权限,例如是否允许访问某张表,是否允许在某个库中创建表。 

GRANT和REVOKE语句允许系统管理员创建MySQL用户账户、授予权限和撤销权限。授予的权限可以分为多个级别:服 务器级别(全局)、数据库级别、表级别、列级别、子程序级别。撤销权限即回收已经存在的权限。 
语法如下: 
GRANT [privileges] ON [objects] TO [user]  
GRANT [privileges] ON [objects] TO [user] IDENTIFIED BY [password]  
REVOKE [privileges] ON [objects] FROM [user] 

MySQL为有SUPER权限的用户专门保留了一个额外的连接,因此即使是所有的普通连接都被占用,MySQL root用户仍可以 登录并检查服务器的活动。如果想要限制单个账户允许的连接数量,可以通过设置max_user_connections变量来完成。 

注意: 
1)当在GRANT语句中指定数据库名称时,允许使用“_”和“%”通配符。这意味着,如果想要使用“_”字符作为一个数据库名称 的一部分,则应该在GRANT语句中指定它为“\_”,例如,“GRANT…ON‘foo\_bar’.* TO…。”; 
2)show tables 命令不会显示用户没有权限访问的表; 
3)不用采用相同的用户名(但来自于不同的主机)赋予不同权限的方式,这样容易造成混淆,导致维护困难; 

2、权限更改何时生效 
当mysqld启动时,所有授权表的内容将被读进内存并且从此时开始生效。当服务器注意到授权表被改变了时,现存的客户 端连接将会受到如下影响。 

表和列的权限在客户端的下一次请求时生效; 
数据库的权限改变在下一个use db_name命令生效; 
全局权限的改变和密码改变在下一次客户端连接时生效; 

如果使用GRANT、REVOKE或SET PASSWORD命令对授权表进行修改,那么服务器会注意到更改并立即将授权表重新载 入内存。如果手动地修改授权表(使用INSERT、UPDATE或DELETE等),则应该执行mysqladmin flush-privileges或mysqladmin reload告 诉服务器再重新装载授权表,否则手动的更改将不会生效,除非重启服务器。 

3、常用的权限 
show privileges命令可以显示MySQL所支持的权限,如下是一些常用的权限。 
mysql> show privileges; 
Select_priv:确定用户是否可以通过SELECT命令选择数据  
Insert_priv:确定用户是否可以通过INSERT命令插入数据  
Update_priv:确定用户是否可以通过UPDATE命令修改现有数据  
Delete_priv:确定用户是否可以通过DELETE命令删除现有数据  
Create_priv:确定用户是否可以创建新的数据库和表  
Drop_priv:确定用户是否可以删除现有数据库和表  
Reload_priv:确定用户是否可以执行刷新和重新加载MySQL所用各种内部缓存的特定命令,包括日志、权限、主机、查询和表  
Shutdown_priv:确定用户是否可以关闭MySQL服务器,将此权限提供给root账户之外的任何用户时,都应当非常谨慎  
Process_priv:确定用户是否可以通过SHOW  
File_priv:确定用户是否可以执行SELECT INTO OUTFILE和LOAD DATA INFILE命令  
Grant_priv:确定用户是否可以将已经授予给该用户自己的权限再授予其他用户,例如,如果用户可以插入、选择和删除foo数据库中的信息,并且授予了GRANT权限,则该用户就可以将其任何或全部权限授予系统中的任何其他用户 
References_priv:目前只是某些未来功能的占位符,现在没有作用  
Index_priv:确定用户是否可以创建和删除表索引  
Alter_priv:确定用户是否可以重命名和修改表结构  
Show_db_priv:确定用户是否可以查看服务器上所有数据库的名字,包括用户拥有足够访问权限的数据库,可以考虑对所有用户禁用这个权限,除非有特别不可抗拒的原因  
Super_priv:确定用户是否可以执行某些强大的管理功能,例如通过KILL命令删除用户进程,使用SET GLOBAL修改全局MySQL变量,执行关于复制和日志的各种命令  
Create_tmp_table_priv:确定用户是否可以创建临时表  
Lock_tables_priv:确定用户是否可以使用LOCK  
Execute_priv:确定用户是否可以执行存储过程,此权限只在MySQL 5.0及更高版本中有意义  
Repl_slave_priv:确定用户是否可以读取用于维护复制数据库环境的二进制日志文件,此用户位于主系统中,有利于主机和客户机之间的通信  
Repl_client_priv:确定用户是否可以确定复制从服务器和主服务器的位置  
Create_view_priv:确定用户是否可以创建视图,此权限只在MySQL 5.0及更高版本中有意义  
Show_view_priv:确定用户是否可以查看视图或了解视图如何执行,此权限只在MySQL 5.0及更高版本中有意义 Create_routine_priv:确定用户是否可以更改或放弃存储过程和函数,此权限是在MySQL 5.0中引入的 Alter_routine_priv:确定用户是否可以修改或删除存储函数及函数,此权限是在MySQL 5.0中引入的 Create_user_priv:确定用户是否可以执行CREATE  
Event_priv:确定用户能否创建、修改和删除事件,这个权限是MySQL 5.1.6新增的  
Trigger_priv:确定用户能否创建和删除触发器,这个权限是MySQL 5.1.6新增的 
Create_tablespace_priv: 创建表的空间 

常用的权限: 
1)SELECT、INSERT、UPDATE和DELETE权限允许用户在一个数据库现有的表上实施读取、插入、更新和删除记录的操 作。这也是一般程序账号所需要的权限; 
2)SHOW VIEW权限允许用户查看已经创建了的视图; 
3)ALTER权限允许用户使用ALTERTABLE命令来修改现有数据表的结构; 
4)CREATE和DROP权限允许用户创建新的数据库和表,或者删除现存的数据库和表。生产环境中一般不赋予程序账号DROP 的权限; 
5)GRANT权限允许用户把自己拥有的权限授予其他的用户; 
6)FILE权限允许被授予该权限的用户都能读或写MySQL服务器能读写的任何文件; 
7)SHUTDOWN权限允许用户使用SHUTDOWN命令关掉服务器。可以创建一个用户专门用来关闭服务器;  
8)PROCESS权限允许用户使用PROCESSLIST命令显示在服务器内执行的进程的信息;使用KILL命令终止服务器进程。用户总是能显示或终止自己的进程,但是,显示或终止其他用户启动的进程则需要PROCESS权限。一些监控工具需要PROCESS权 限查看正在执行的命令; 

4、设置mysql用户资源限制 
• 通过设置全局变量max_user_connections可以限制所有用户在同一时间连接MySQL实例的数量,但此参数无法对每个用户区别对待,所以 MySQL提供了对每个用户的资源限制管理 
• MAX_QUERIES_PER_HOUR:一个用户在一个小时内可以执行查询的次数(基本包含所有语句) 
• MAX_UPDATES_PER_HOUR:一个用户在一个小时内可以执行修改的次数(仅包含修改数据库或表的语句) 
• MAX_CONNECTIONS_PER_HOUR:一个用户在一个小时内可以连接MySQL的时间 
• MAX_USER_CONNECTIONS:一个用户可以在同一时间连接MySQL实例的数量 

• 通过执行create user/alter user设置/修改用户的资源限制 
mysql> CREATE USER 'francis'@'localhost' IDENTIFIED BY 'frank' WITH MAX_QUERIES_PER_HOUR 20 MAX_UPDATES_PER_HOUR 10 MAX_CONNECTIONS_PER_HOUR 5 MAX_USER_CONNECTIONS 2; 
mysql> ALTER USER 'francis'@'localhost' WITH MAX_QUERIES_PER_HOUR 100; 

• 取消某项资源限制既是把原先的值修改成0 
 mysql> ALTER USER 'francis'@'localhost' WITH MAX_CONNECTIONS_PER_HOUR 0; 
  
 • 当针对某个用户的max_user_connections非0时,则忽略全局系统参数 max_user_connections,反之则全局系统参数生效 

5、设置mysql用户的密码 
1)执行create user 创建用户和密码 
mysql> CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass'; 
2)修改用户密码的方式包括: 
mysql> ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass'; 
mysql> SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('mypass'); 
mysql> GRANT USAGE ON *.* TO 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';  
shell> mysqladmin -u user_name -h host_name password "new_password"; 
3)修改本身用户密码的方式包括: 
mysql> ALTER USER USER() IDENTIFIED BY 'mypass';  
mysql> SET PASSWORD = PASSWORD('mypass'); 
posted @ 2022-12-23 09:50  Harda  阅读(176)  评论(0编辑  收藏  举报