首页 > 代码库 > MYSQL用户权限管理
MYSQL用户权限管理
mysql用户和权限管理
作为一名mysql数据库管理员,有责任维护数据库系统上的数据的的完整性和安全性,使得只有被正确授权的用户才可以访问。这将涉及到数据库的外部安全性和内部安全星=性。
所谓外部安全性:就是决定用户是否可以登入到mysql数据库系统上,这样可以有效的避免来自外部网络对服务器连接的攻击。
内部安全性:即是防止服务器上已存在的用户对mysql服务器上面的数据进行攻击,因此,一个用户的权限如果设置不好的话,可能导致数据库上面的数据被删除、修改等等。
mysql的授权表
mysql客户能否访问mysql数据库是由mysql的授权表来决定的,这些授权表是在刚刚安装mysql时,进行mysql初始化(mysql_install_db脚本)生成的。这些授权表公有6个,分别是:
user:该表存放了可以访问mysql服务器的用户名和密码,该表中启用的权限为全局权限,且适用于所有库。
db:该表存放的是所有的数据库,该表启用的权限只对该数据库有效。因此,这个表设置的是数据库级别的权限。
host:该表已被废弃
tables_priv:用于指定表级别权限
columns_priv:用于指定烈级别权限
procs_priv:用于指定存储过程和存储函数的相关权限
proxies_priv:用于指定代理用户的相关权限
mysql的权限管理
出于对数据的安全性保护,因此,授予正确的权限给用户史非常重要的,下面这张表记录的就是mysql的所有权限。包括库级别、表级别、索引级别、字段级别、存储函数和存储过程级别、视图级别、文件访问级别以及全局权限等等众多权限。每一个级别及其相关的权限都在下表显示。
context:表示这些权限可以用在哪些环境或级别下。
http://dev.mysql.com/doc/mysql-security-excerpt/5.5/en/privileges-provided.html#priv_create_temporay_tables(使用这个网址可以查询到如下表结构)
Privilege | Column | Context |
CREATE |
| databases, tables, or indexes |
DROP |
| databases, tables, or views |
GRANT OPTION |
| databases, tables, or stored routines |
LOCK TABLES |
| databases |
REFERENCES |
| databases or tables |
EVENT |
| databases |
ALTER |
| tables |
DELETE |
| tables |
INDEX |
| tables |
INSERT |
| tables or columns |
SELECT |
| tables or columns |
UPDATE |
| tables or columns |
CREATE TEMPORARY TABLES |
| tables |
TRIGGER |
| tables |
CREATE VIEW |
| views |
SHOW VIEW |
| views |
ALTER ROUTINE |
| stored routines |
CREATE ROUTINE |
| stored routines |
EXECUTE |
| stored routines |
FILE |
| file access on server host |
CREATE TABLESPACE |
| server administration |
CREATE USER |
| server administration |
PROCESS |
| server administration |
PROXY |
| server administration |
RELOAD |
| server administration |
REPLICATION CLIENT |
| server administration |
REPLICATION SLAVE |
| server administration |
SHOW DATABASES |
| server administration |
SHUTDOWN |
| server administration |
SUPER |
| server administration |
ALL [PRIVILEGES] | server administration | |
USAGE | server administration |
创建用户、为用户授权和取消授权
1、创建用户
CREATE USER username@’host’ [IDENTIFIED BY ‘password’]
其中username必须在16个字符以内才行
host:可以表示的方法有这些:
HOSTNAME:例如www.baidu.com
IP:例如192.168.1.1
NETWORK:例如172.16.0.0/255.255.0.0
通配符表示法:
%:表示所有的主机
%.xsl.com:表示这个域内的所有主机
在连接mysql服务器时,mysql服务器为了验证远程主机的合法性,一般会进行正解和反解主机名,使用--skip-name-resolv选项可以忽略名称解析过程,这可以在某一程度上缓解mysql服务器的连接和加速mysql的性能及节约时间。
2、为用户授权
授权命令使用GRANT
GRANT的语法格式为:
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 ...]
其中priv_type:表示权限类型,就是上表最左边的字段,那里有所有的权限类型
column_list:是可选字段,表示对指定的字段授权。可以指定多个
objiect_type:表示对象类型,主要有有三个:
TABLE(表)、FUNCTION(存储函数)、PROCEDURE(存储过程)
priv_level:表示设置在哪个级别下的权限
* :表示用来设定任何库级别下的权限
| *.* :如果使用这中方式,必须要指定对象类型字段。用来说明是设定库的表、库的存储函数还是库的存储过程等相关权限
| db_name.*:如果使用这中方式,必须要指定对象类型字段。用来说明是设定库的表、库的存储函数还是库的存储过程等相关权限
| db_name.tbl_name:表示设定某个库下的某个表的权限
| tbl_name:表示设定在某个表的权限
| db_name.routine_name:表示设定某个库的某个存储程序的相关权限
user_specification :username@’hostname’ [IDENTIFIED BY [PASSWORD] ‘password‘],为某个用户授权
ssl_option:这些是使用ssl来建立mysql会话时使用的选项
SSL
| X509
| CIPHER ‘cipher‘
| ISSUER ‘issuer‘
| SUBJECT ‘subject‘
with_option:
GRANT OPTION :可以为某个用户授权
| MAX_QUERIES_PER_HOUR count :每小时的最大查询请求数
| MAX_UPDATES_PER_HOUR count:每小时的最大更新请求数
| MAX_CONNECTIONS_PER_HOUR count:每小时的最大连接数
| MAX_USER_CONNECTIONS count:每个主机的用户最多可以连接几次
查看用户授权信息
SHOW GRANTS FOR ‘username‘@‘host‘
授权完毕后,执行flush privilege命令让系统重读授权表
重读授权表
Flush privileges
在帮用户授权完毕后,执行该命令,可以让内存重读授权表。当mysql服务启动后,系统会加载授权表到内存中去,因此,一旦授权表更改,必须让内存重读授权表。
3、取消用户授权revoke
REVOKE命令可以用来取消用户相关权限的,其语法和命令和GRANT命令大概一致
REVOKE
priv_type [(column_list)] [, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user [,user] …
本文出自 “linux学习之路” 博客,请务必保留此出处http://xslwahaha.blog.51cto.com/4738972/1579889
MYSQL用户权限管理