直接授予权限
您可以通过 GRANT 语句直接授予用户权限。
前提条件
当前用户必须拥有被授予的权限(例如,test1 把表 t1 的 SELECT 权限授予 test2,则 test1 必须拥有表 t1 的 SELECT 的权限),并且拥有 GRANT OPTION权限,才能授予成功。
查看当前拥有权限的操作请参见 查看用户权限。
注意事项
进行授权前,需要注意以下事项:
-
给特定用户授予权限时,如果用户不存在,可以直接创建用户。如果
sql_mode='no_auto_create_user',且语句中没有IDENTIFIED BY指定密码时,不可以直接创建用户。 -
同时把多个权限赋予用户时,权限类型用英文逗号(,)分隔。
-
同时给多个用户授权时,用户名用英文逗号(,)分隔。
-
用户被授权后,该用户只有重新连接 seekdb,权限才能生效。
授予权限的语法
授予权限的语法如下:
GRANT priv_type
ON priv_level
TO user_specification [, user_specification]...
[WITH GRANT OPTION];
priv_level:
*
| *.*
| database_name.*
| database_name.table_name
| table_name
| database_name.routine_name
user_specification:
user_name [IDENTIFIED BY [PASSWORD] 'password']
语句使用说明:
-
priv_type:指定授予的权限类型。同时将多个权限授予用户时,权限类型之间使用英文逗号(,)分隔。如果需要授予列级权限,则需要在对应的权限类型后指定列名(格式为
priv(col_list)),支持同时指定多列,列名之间使用英文逗号间隔。例如,授予c1列的SELECT权限,则表示为SELECT(c1)。在为表选择列进行授权时:
-
如果需要对某些列执行
UPDATE语句,则需要授予用户这些列的UPDATE权限,以及其他要访问的列的SELECT权限。例如,对于以下语句:
UPDATE tb1 SET c1=c3, c2=1+3 WHERE c4=1;由于需要更新的列是
c1和c2,则需要对用户授予c1和c2列的UPDATE权限;同时又需要访问c3和c4列,故还需要对用户授予c3和c4列的SELECT权限。 -
如果需要对某些列执行
INSERT语句或REPLACE语句,则需要授予用户插入数据的这些列的INSERT权限,以及其他要访问的列的SELECT权限。 -
对于其他语句,需要访问哪些列就授予用户哪些列的
SELECT权限即可。
有关 MySQL 模式支持的所有权限类型,请参见 权限分类。
-
-
priv_level:指定授予权限的层级。权限主要分为以下层级:-
全局:适用于所有的数据库。使用
GRANT ... ON *.*授予全局权限。 -
数据库层级:适用于指定一个数据库中的所有目标。使用
GRANT ... ON db_name.*授予数据库级权限。 -
表层级:适用于指定一个表中的所有列 。使用
GRANT ... ON database_name.table_name授予表级权限。授予列权限时,也使用
GRANT ... ON database_name.table_name来表示指定的表。
-
-
user_specification:指定待授予权限的用户。如果用户不存在,则直接创建用户。同时授权给多个用户时,用户名之间使用英文逗号(,)分隔。
-
user_name IDENTIFIED BY 'password'与user_name IDENTIFIED BY PASSWORD 'password':user_name IDENTIFIED BY 'password'子句中的密码为明文;user_name IDENTIFIED BY PASSWORD 'password'子句中的密码为密文。 -
WITH GRANT OPTION:指定权限是否允许转授或撤销。
操作示例
-
授予全局权限
该权限适用于所有数据库。通常使用
GRANT ... ON *.*授予全局权限。-
将所有数据库的所有对象的权限授予用户
test。GRANT ALL ON *.* TO test; -
将所有数据库中所有表的
INSERT、SELECT权限授予用户test。GRANT SELECT, INSERT ON *.* TO test;
-
-
授予数据库级权限
数据库级权限是指某个指定的数据库中所有对象的操作权限。通常使用
GRANT ... ON db_name.*授予数据库级权限。-
将数据库
db1的所有对象的操作权限授予用户test。GRANT ALL ON db1.* TO test; -
将数据库
db1的所有表的INSERT、SELECT权限授予用户test。GRANT SELECT, INSERT ON db1.* TO test;
-
-
授予表级权限
对象权限是指某个指定的数据库中的指定表的操作权限。通常使用
GRANT ... ON db_name.tb1_name授予对象权限。-
将数据库
db1的表tb1_name的INSERT、SELECT权限授予用户test。GRANT SELECT, INSERT ON db1.tb1_name TO test; -
将数据库
db1的表tb1_name的操作权限授予用户test。GRANT ALL ON db1.tb1_name TO test;
-
-
授予表中的列权限
列权限是指对某个指定表的指定列的操作权限。
以下示例中,将数据库
db1下表tb1_name的c1列的SELECT权限以及c1和c2列的INSERT权限授予用户test。GRANT SELECT(c1), INSERT (c1, c2) ON db1.tb1_name TO test;
更多 GRANT 语句的信息请参见 GRANT。