创建用户并赋予权限
1.grant命令
命令格式: grant <privilege> on <object> to <user> [identified by user-password] [with grant option];
<privilege>
取值:
值 | 说明 |
---|---|
alter | 改变表和索引 |
create | 创建数据库和表 |
delete | 从数据库中删除数据 |
drop | 删除数据库和表 |
index | 管理索引 |
insert | 在数据库中添加数据 |
lock tables | 允许锁定表 |
select | 提取数据 |
update | 修改数据 |
all | 以上所有 |
授予特权的对象被标识为: databasename.tablename
.在Linux传统中,*
代表的是通配符,因此 *.*
代表每个数据库中的每个对象,而foo.*
代表数据库foo中的每个表.
如果指定的用户已经存在,他的特权会被编辑以反映你所做的修改.如果用户不存在,他就会以特定的特权被创建.用户可以被指定为来自某个特定的主机.你应该在同一个命令中同时指定用户和主机.
SQL语法中,%
代表通配符,与shell中的*
作用完全一样.如果想授予用户rick从wiley.com域中任何主机访问的权限,可以把rick描述为: rick@'%.wiley.com'
. 任何时候使用%
通配符都必须把它放在引号中,以与其它文本分开.授予rick从本地网络中任何机器连接的特权可以把rick描述为: rick@'192.168.0.0/255.255.255.0'
mysql> GRANT ALL ON *.* TO rick@'192.268.0.0/255.255.255.0' IDENTIFIED BY 'secretpassword';
只要可能,尽量不要在用户名和数据库名中包含下划线,因为SQL中的下划线是一种匹配任意单个字符的模式,这与%
匹配一个字符串非常类似.
revoke命令
剥夺用户权限通过revoke命令来完成:
revoke <a_privilege> on <an_object> from <a_user>
与grant相似.例如:
mysql> REVOKE INSERT ON foo.* FROM rick@'%'
;
但是revoke命令不能删除用户.想要删除一个用户,应该用revoke来删除它的权限,然后切换到内部的mysql数据库,通过从user表中删除相应的行来完全删除一个用户:
mysql> use mysql
mysql> DELETE FROM user WHERE user = "rick"
mysql> FLUSH PRIVILEGES;