合理的管理DB用户权限是一个DBA的基本工作,这里整理一下MySQL用户管理的相关内容。
CREATE USER、DROP USER、RENAME USER
用来创建、删除、修改MySQL用户
GRANT
为给定MySQL用户分配权限
REVOKE 撤销已给定MySQL用户的相关权限
SET PASSWORD 为MySQL用户配置密码
SHOW GRANTS 显示给定MySQL用户的权限
相关用户及权限的信息都会记录在MySQL数据库中的权限表中,如下:
user 可连接到数据库的用户及其全局权限
db 数据库级权限
table_priv 数据表级权限
columns_priv 数据列级权限
procs_priv 与存储例成相关的权限
MySQL用户管理
创建MySQL用户(拥有创建MySQL 用户权限的用户才可以创建,下面例子以root用户为测试用户)
mysql> create user kevin@'%'>
Query OK, 0 rows affected (0.00 sec)mysql> select user, host, password from mysql.user where user='kevin';
+-------+------+-------------------------------------------+| user | host | password |
+-------+------+-------------------------------------------+| kevin | % | *2447D497B9A6A15F2776055CB2D1E9F86758182F |
+-------+------+-------------------------------------------+1 row in set (0.00 sec)
kevin@’%’ 用户名+主机名
% 字符通配符,表示任意字符
MySQL通过配置主机名来限制通过索要创建的MySQL用户登录的主机,%表示任意主机都可以登入。
kevin@10.8.1.% 表示10.8.1段的主机可以登入
kevin@’Oracle.com.cn’ 表示主机名为oracle.com.cn的主机可以通过kevin用户登入。
对MySQL账户授权
syntax:
GRANT privileges (columns)
on what
TO account
[identified by ‘password’]
[REQUIRE encryption requirements]
[WITH grant or resource management options]
如果grant语句中账户不存在则先创建相应账户,再把给定权限分配给它。
privilege 授予账户的权限。
what 权限的级别。 最高级别是全局,给定的权限用于所有的数据库和所有的数据表。同时,权限还可以设置为数据库、表、列及存储过程级别。
account 被授予权限的账号。
password 修改账户的口令
columns 权限作用列
REQUIRE和WITH子句是可选的,require子句用于使用SSL进行安全连接。WITH子句用来授予GRANT OPTION权限(允许把账户自己的权限授予别人)。
账户权限整理
数据库管理权限
CREATE USER FILE(READ OR WRITE MYSQL SERVER’S FILES) GRANT OPTION> 数据库对象权限
ALTER/ALTER ROUTINE/CREATE/CREATE ROUTINE/CREATE TEMPORARY TABLES/CREATE VIEWS/DELETE/DRPOP/EVENT/EXECUTE/INDEX/INSERT/LOCK TABLES/REFERENCE/SELECT/SHOW VIEW/TRIGGER/UPDATE
其它权限
ALL ALL operations inluding GRANT privilege
USAGE a special privilege and means NULL privilege
用户在授权时必须拥有相应的权限及GRANT OPTION权限。同时,MySQL权限范围包括数据库系统全局,数据库,数据表,数据列等多种范围,付权时通过ON子句控制赋予权限的范围,如下:
ON . 全局权限
ON * 如果没有指定数据库(use db),则是全局权限,否则是是定数据库默认对象的权限。
ON db_name.* 数据库级别权限
ON db_name.tbl_name 数据库表级权限
ON tbl_name 数据表级权限
ON db_name。routie_name 存储例程权限
查看用户拥有的权限。
mysql> show grants for system; +----------------------------------------------------------------------------------------------------------------+| Grants for system@% |
+----------------------------------------------------------------------------------------------------------------+| GRANT ALL PRIVILEGES ON *.* TO 'system'@'%'> +----------------------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)12345671234567
撤销权限和删除用户
REVOKE privileges [columns] ON what FROM account;
修改用户的口令
SET PASSWORD FOR system@’%’ = PASSWORD(‘PASSWD’)
当然,增加、修改用户的权限也可以直接insert、update mysql.user表,这些操作就需要感性却的初学者试一下了。