暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

关于表的权限

SQL新手 2022-12-08
213

本文为您介绍如何赋予、回收表的权限。

赋予权限

概述

该语句用于系统管理员授予用户某些权限。

说明

  • 当前用户必须拥有被授予的权限(例如,user1 把表 tbl1 的 SELECT 权限授予 user2,则 user1 必须拥有表 tbl1 的 SELECT 的权限),并且拥有 GRANT OPTION 权限,才能授予成功。
  • 用户授权后,该用户只有重新连接 OceanBase 数据库,权限才能生效。

语法

GRANT priv_type
    ON priv_level 
    TO user_specification [, user_specification]... 
     [WITH with_option ...]

priv_type:
      ALTER
    | CREATE
    | CREATE USER
    | CREATE VIEW
    | DELETE
    | DROP
    | GRANT OPTION
    | INDEX
    | INSERT
    | PROCESS
    | SELECT
    | SHOW DATABASES
    | SHOW VIEW
    | SUPER
    | UPDATE
    | USAGE
    
priv_level: 
      *
    | *.*
    | database_name.* 
    | database_name.table_name
    | table_name
    | database_name.rountine_name

user_specification: 
user [IDENTIFIED BY [PASSWORD] 'password'] 

with_option:
 GRANT OPTION

参数解释

参数描述
priv_type指定授予的权限类型。具体的权限类型及其说明请参见下方权限类型说明表。 同时把多个权限赋予用户时,权限类型用","隔开。
priv_level指定授予权限的层级。权限可以分为以下几个层级:
  • 全局层级:适用于所有的数据库。使用 GRANT ALL ON *.* 授予全局权限。
  • 数据库层级:适用于一个给定数据库中的所有目标。使用 GRANT ALL ON db_name.* 授予数据库权限。
  • 表层级:表权限适用于一个给定表中的所有列。使用 GRANT ALL ON database_name.table_name 授予表权限。
用 "*" 代替 table_name,表示赋予全局权限,即对数据库中的所有表赋权。
user_specification给特定用户授予权限。如果用户不存在,可以直接创建用户。 同时给多个用户授权时,用户名以逗号(,)分隔。
user IDENTIFIED BY 'password'指定密码为明文。
user IDENTIFIED BY PASSWORD 'password'指定密码为密文。
with_option是否允许转授指定权限。

可以授予的权限类型如下表所示。

权限说明
ALL PRIVILEGES除 GRANT OPTION 以外所有权限。
ALTERALTER TABLE 的权限。
CREATECREATE TABLE 的权限。
CREATE USERCREATE USER、DROP USER、RENAME USER 和 REVOKE ALL PRIVILEGES 的权限。
CREATE TABLEGROUP全局 CREATE TABLEGROUP 的权限。
DELETEDELETE 的权限。
DROPDROP 的权限。
GRANT OPTIONGRANT OPTION 的权限。
INSERTINSERT 的权限。
SELECTSELECT 的权限。
UPDATEUPDATE 的权限。
SUPERSET GLOBAL 修改全局系统参数的权限。
SHOW DATABASES全局 SHOW DATABASES 的权限。
INDEXCREATE INDEX 与 DROP INDEX 的权限。
CREATE VIEWCREATE VIEW 与 DROP VIEW 的权限。
SHOW VIEWSHOW CREATE VIEW 权限。

示例

  1. 为用户赋予所有权限。

    1. 为用户 ny 赋予所有权限。

      obclient> GRANT ALL PRIVILEGES ON *.* TO ny WITH GRANT OPTION;
      Query OK, 0 rows affected
      
    2. 查看用户 ny 的权限。

      obclient> SHOW GRANTS FOR ny;
      +-------------------------------------------------------+
      | Grants for ny@%                                       |
      +-------------------------------------------------------+
      | GRANT ALL PRIVILEGES ON *.* TO 'ny' WITH GRANT OPTION |
      +-------------------------------------------------------+
      1 row in set
      
  2. 为用户赋予数据库的所有权限。

    1. 为 ny 用户赋予 data_ny 库的所有权限。

      obclient> GRANT ALL PRIVILEGES ON data_ny.* to ny with GRANT OPTION;
      Query OK, 0 rows affected (0.02 sec)
      
    2. 查看 ny 用户赋予 data_ny 库的所有权限。

      obclient> SHOW GRANTS FOR ny;
      +---------------------------------------------------------------+
      | Grants for ny@%                                               |
      +---------------------------------------------------------------+
      | GRANT USAGE ON *.* TO 'ny'                                    |
      | GRANT ALL PRIVILEGES ON `data_ny`.* TO 'ny' WITH GRANT OPTION |
      +---------------------------------------------------------------+
      2 rows in set
      
  3. 为用户赋予某张表的所有权限。

    1. 为 ny 用户赋予 data_ny 库中的 dws_ny 表所有权限。

      obclient> GRANT ALL PRIVILEGES ON data_ny.dws_ny to ny with GRANT OPTION;
      Query OK, 0 rows affected
      
    2. 查看 ny 用户赋予 data_ny 库中的 dws_ny 表所有权限。

      obclient> SELECT * FROM information_schema.TABLE_PRIVILEGES where TABLE_NAME='dws_ny';
      +----------+---------------+--------------+------------+----------------+--------------+
      | GRANTEE  | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | PRIVILEGE_TYPE | IS_GRANTABLE |
      +----------+---------------+--------------+------------+----------------+--------------+
      | 'ny'@'%' | def           | data_ny      | dws_ny     | ALTER          | YES          |
      | 'ny'@'%' | def           | data_ny      | dws_ny     | CREATE         | YES          |
      | 'ny'@'%' | def           | data_ny      | dws_ny     | DELETE         | YES          |
      | 'ny'@'%' | def           | data_ny      | dws_ny     | DROP           | YES          |
      | 'ny'@'%' | def           | data_ny      | dws_ny     | INSERT         | YES          |
      | 'ny'@'%' | def           | data_ny      | dws_ny     | UPDATE         | YES          |
      | 'ny'@'%' | def           | data_ny      | dws_ny     | SELECT         | YES          |
      | 'ny'@'%' | def           | data_ny      | dws_ny     | INDEX          | YES          |
      | 'ny'@'%' | def           | data_ny      | dws_ny     | CREATE VIEW    | YES          |
      | 'ny'@'%' | def           | data_ny      | dws_ny     | SHOW VIEW      | YES          |
      +----------+---------------+--------------+------------+----------------+--------------+
      10 rows in set
      

      说明

      root 用户与 ny 用户下都可以在 TABLE_PRIVILEGES 表中查询到 dws_ny 表的权限。

回收权限

概述

该语句用于系统管理员撤销 User 的某些权限。

使用说明如下:

  • 用户必须拥有被撤销的权限(例如,user1 要撤销 user2 对表 t1 的 SELECT 权限,则 user1 必须拥有表 t1 的 SELECT 的权限),并且拥有 GRANT OPTION 权限。

  • 撤销 ALL PRIVILEGES 和 GRANT OPTION 权限时,当前用户必须拥有全局 GRANT OPTION 权限,或者对权限表的 UPDATE 及 DELETE 权限。

  • 撤销操作不会级联。例如,用户 user1 给 user2 授予了某些权限,撤回 user1 的权限不会同时也撤回 user2 的相应权限。

语法

REVOKE priv_type 
     ON database.table_name 
     FROM 'user_name';

priv_type:
      ALTER
    | CREATE
    | CREATE USER
    | CREATE VIEW
    | DELETE
    | DROP
    | GRANT OPTION
    | INDEX
    | INSERT
    | PROCESS
    | SELECT
    | SHOW DATABASES
    | SHOW VIEW
    | SUPER
    | UPDATE
    | USAGE

参数解释

参数描述
priv_type指定撤销的权限类型。具体的权限类型及其说明请参见下方权限类型说明表。 同时对某个用户撤销多个权限时,权限类型用","隔开。
database.table_name指定数据库中的表。 用 "*" 代替 database 或 table_name,表示撤销全局权限,即撤销对数据库中所有表的操作权限。
user_name指定撤销权限的用户。同时撤销多个用户的授权时,用户名用","隔开。

可以撤销的权限类型如下表所示。

权限说明
ALL PRIVILEGES除 GRANT OPTION 以外所有权限。
ALTERALTER TABLE 的权限。
CREATECREATE TABLE 的权限。
CREATE USERCREATE USER、DROPUSER、RENAME USER 和 REVOKE ALL PRIVILEGES 的权限。
CREATE TABLEGROUP全局 CREATE TABLEGROUP 的权限。
DELETEDELETE 的权限。
DROPDROP 的权限。
GRANT OPTIONGRANT OPTION 的权限。
INSERTINSERT 的权限。
SELECTSELECT 的权限。
UPDATEUPDATE 的权限。
SUPERSET GLOBAL 修改全局系统参数的权限。
SHOW DATABASES全局 SHOW DATABASES 的权限。
INDEXCREATE INDEX 与 DROP INDEX 的权限。
CREATE VIEWCREATE VIEW 与 DROP VIEW 的权限。
SHOW VIEWSHOW CREATE VIEW 权限。

说明

目前没有 Change Effective Tenant 的权限控制,因此 sys 租户下的用户都可以撤销权限。

示例

  1. 为用户移除 update 权限。

    1. 为 ny 用户 data_ny 库中的 dws_ny 表的 update 权限。

      obclient> revoke update on data_ny.dws_ny from ny;
      Query OK, 0 rows affected
      
    2. 查看 ny 用户下的 data_ny 库中的 dws_ny 表目前的权限。

      obclient> select * from information_schema.TABLE_PRIVILEGES where TABLE_NAME='dws_ny';
      +----------+---------------+--------------+------------+----------------+--------------+
      | GRANTEE  | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | PRIVILEGE_TYPE | IS_GRANTABLE |
      +----------+---------------+--------------+------------+----------------+--------------+
      | 'ny'@'%' | def           | data_ny      | dws_ny     | ALTER          | YES          |
      | 'ny'@'%' | def           | data_ny      | dws_ny     | CREATE         | YES          |
      | 'ny'@'%' | def           | data_ny      | dws_ny     | DELETE         | YES          |
      | 'ny'@'%' | def           | data_ny      | dws_ny     | DROP           | YES          |
      | 'ny'@'%' | def           | data_ny      | dws_ny     | INSERT         | YES          |
      | 'ny'@'%' | def           | data_ny      | dws_ny     | SELECT         | YES          |
      | 'ny'@'%' | def           | data_ny      | dws_ny     | INDEX          | YES          |
      | 'ny'@'%' | def           | data_ny      | dws_ny     | CREATE VIEW    | YES          |
      | 'ny'@'%' | def           | data_ny      | dws_ny     | SHOW VIEW      | YES          |
      +----------+---------------+--------------+------------+----------------+--------------+
      9 rows in set
      

      说明

      root 用户与 ny 用户下都可以在 TABLE_PRIVILEGES 表中查询到 dws_ny 表的权限。

  2. 为用户移除某库的 update 权限。

    1. 为 ny 用户 data_ny 库中的 dws_ny 表的 update 权限。

      obclient> revoke update on data_ny.* from ny;
      Query OK, 0 rows affected
      
    2. 查看 ny 用户下的 data_ny 库当前的权限。

      obclient> SHOW GRANTS FOR ny;
      +----------------------------------------------------------------------------------------------------------------------------------+
      | Grants for ny@%                                                                                                                  |
      +----------------------------------------------------------------------------------------------------------------------------------+
      | GRANT USAGE ON *.* TO 'ny'                                                                                                       |
      | GRANT ALTER, CREATE, DELETE, DROP, INSERT, SELECT, INDEX, CREATE VIEW, SHOW VIEW ON `data_ny`.* TO 'ny' WITH GRANT OPTION        |
      | GRANT ALTER, CREATE, DELETE, DROP, INSERT, SELECT, INDEX, CREATE VIEW, SHOW VIEW ON `data_ny`.`dws_ny` TO 'ny' WITH GRANT OPTION |
      +----------------------------------------------------------------------------------------------------------------------------------+
      3 rows in set
      
  3. 为用户移除 update 权限。

    1. 为用户 ny 移除 update 权限。

      obclient> revoke UPDATE on *.* from ny;
      Query OK, 0 rows affected
      
    2. 查看 ny 用户的当前权限。

      obclient> SHOW GRANTS FOR ny;
      +----------------------------------------------------------------------------------------------------------------------------------+
      | Grants for ny@%                                                                                                                  |
      +----------------------------------------------------------------------------------------------------------------------------------+
      | GRANT USAGE ON *.* TO 'ny'                                                                                                       |
      | GRANT ALTER, CREATE, DELETE, DROP, INSERT, SELECT, INDEX, CREATE VIEW, SHOW VIEW ON `data_ny`.* TO 'ny' WITH GRANT OPTION        |
      | GRANT ALTER, CREATE, DELETE, DROP, INSERT, SELECT, INDEX, CREATE VIEW, SHOW VIEW ON `data_ny`.`dws_ny` TO 'ny' WITH GRANT OPTION |
      +----------------------------------------------------------------------------------------------------------------------------------+
      3 rows in set
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论