用户权限设置

1、以root(也可用其它有权限的用户)身份登录

2、下面创建一个test用户,密码为test,并且只能对picture数据库进行操作的命令

mysql>GRANT ALL ON picture.* TO testIDENTIFIED BY "test";

 

GRANT语句的语法看上去像这样:

GRANT privileges (columns) ON what TO userIDENTIFIED BY "password" WITH GRANT OPTION 

privileges (columns)

what 填写管理范围,例如整个数据库(*.*)、单个数据库(picture.*)、单张表(picture.user(id,user,pwd))、


要使用该语句,你需要填写下列部分: 

privileges 授予用户的权限,下表列出可用于GRANT语句的权限指定符: 

 权限指定符权限允许的操作 

Alter 修改表和索引 

Create 创建数据库和表 

Delete 删除表中已有的记录 

Drop 抛弃(删除)数据库和表 

INDEX 创建或抛弃索引 

Insert 向表中插入新行 

REFERENCE 未用 

Select 检索表中的记录 

Update 修改现存表记录 

FILE 读或写服务器上的文件 

PROCESS 查看服务器中执行的线程信息或杀死线程 

RELOAD 重载授权表或清空日志、主机缓存或表缓存。 

SHUTDOWN 关闭服务器 

ALL       所有;ALL PRIVILEGES同义词 

USAGE 特殊的“无权限”权限

 

  上表显示在第一组的权限指定符适用于数据库、表和列,第二组数管理权限。一般,这些被相对严格地授权,因为它们允许用户影响服务器的操作。第三组权限特殊,ALL意味着“所有权限”,UASGE意味着无权限,即创建用户,但不授予权限。

 

columns   权限运用的列,它是可选的,并且你只能设置列特定的权限。如果命令有多于一个列,应该用逗号分开它们。 

 

what   权限运用的级别。权限可以是全局的(适用于所有数据库和所有表)、特定数据库(适用于一个数据库中的所有表)或特定表的。可以通过指定一个columns字句是权限是列特定的。

 

user  权限授予的用户,它由一个用户名和主机名组成。在MySQL中,你不仅指定谁能连接,还有从哪里连接。这允许你让两个同名用户从不同地方连接。 MySQL让你区分他们,并彼此独立地赋予权限。MySQL中的一个用户名就是你连接服务器时指定的用户名,该名字不必与你的Unix登录名或 Windows名联系起来。缺省地,如果你不明确指定一个名字,客户程序将使用你的登录名作为MySQL用户名。这只是一个约定。你可以在授权表中将该名字改为nobody,然后以nobody连接执行需要超级用户权限的操作。 

 

password  赋予用户的口令,它是可选的。如果你对新用户没有指定IDENTIFIED BY子句,该用户不赋给口令(不安全)。对现有用户,任何你指定的口令将代替老口令。如果你不指定口令,老口令保持不变,当你用IDENTIFIED BY时,口令字符串用改用口令的字面含义,GRANT将为你编码口令,不要你用SET PASSWORD 那样使用password()函数。 

 

WITH GRANT OPTION子句是可选的。如果你包含它,用户可以授予权限通过GRANT语句授权给其它用户。你可以用该子句给与其它用户授权的能力。

 

  注意:用户名、口令、数据库和表名在授权表记录中是大小写敏感的,主机名和列名不是。 

 

 

 

查看 MySQL 用户权限 查看当前用户(自己)权限: 

show grants; 

查看其他 MySQL 用户权限: 

show grants for dba@localhost; 

撤销已经赋予给 MySQL 用户权限的权限。 

revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可:

grant all on *.* to   dba@localhost; 

revoke all on *.* from dba@localhost;

MySQL grant、revoke 用户权限注意事项 

1. grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。 

2. 如果想让授权的用户,也可以将这些权限 grant 给其他用户,需要选项 “grant option“ 

 

grant select on testdb.* to dba@localhost with grant option; 

这个特性一般用不到。实际中,数据库权限最好由 DBA 来统一管理。