更新时间:2025-06-30 GMT+08:00

用户与权限

概述

GaussDB数据库用户与权限管理的行为请参见《开发指南》中的“数据库安全 > 用户及权限”章节。

用户与权限的语法说明请参见《M-Compatibility开发指南》中的“ SQL参考 > SQL语法 > SQL语句”章节。

差异说明

  • 语法格式差异

    GaussDB数据库的授权语法请参见《M-Compatibility开发指南》中的“ SQL参考 > SQL语法 > SQL语句 > G > GRANT”章节。

    MySQL中的授权语法如下:

    -- 全局级、数据库级、表级、存储过程级赋权语法
    GRANT
         priv_type [(column_list)]
           [, priv_type [(column_list)]] ...
         ON [object_type] priv_level
         TO user [auth_option] [, user [auth_option]] ...
         [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
         [WITH {GRANT OPTION | resource_option} ...]
     
    -- 用户代理赋权语法
    GRANT PROXY ON user
         TO user [, user] ...
         [WITH GRANT OPTION]
     
    object_type: {
         TABLE
      | FUNCTION
      | PROCEDURE
    }
     
    priv_level: {
         *
      | *.*
      | db_name.*
      | db_name.tbl_name
      | tbl_name
      | db_name.routine_name
    }
     
    user:
         'user_name'@'host_name'
     
    auth_option: {
         IDENTIFIED BY 'auth_string'
      | IDENTIFIED WITH auth_plugin
      | IDENTIFIED WITH auth_plugin BY 'auth_string'
      | IDENTIFIED WITH auth_plugin AS 'auth_string'
      | IDENTIFIED BY PASSWORD 'auth_string'
    }
     
    tls_option: {
         SSL
      | X509
      | CIPHER 'cipher'
      | ISSUER 'issuer'
      | SUBJECT 'subject'
    }
     
    resource_option: {
      | MAX_QUERIES_PER_HOUR count
      | MAX_UPDATES_PER_HOUR count
      | MAX_CONNECTIONS_PER_HOUR count
      | MAX_USER_CONNECTIONS count
    }
  • 赋权类型差异
    MySQL支持的赋权类型如下:
    表1 MySQL支持的赋权类型

    权限类型

    释义及权限级别

    ALL [PRIVILEGES]

    授予指定访问级别的所有权限,除了 GRANT OPTIONPROXY

    ALTER

    启用ALTER TABLE。级别:全局、数据库、表。

    ALTER ROUTINE

    允许更改或删除存储过程。级别:全局、数据库、例程。

    CREATE

    启用数据库和表创建。级别:全局、数据库、表。

    CREATE ROUTINE

    启用存储过程创建。级别:全局、数据库。

    CREATE TABLESPACE

    允许创建、更改或删除表空间和日志文件组。级别:全局。

    CREATE TEMPORARY TABLES

    启用CREATE TEMPORARY TABLE。 级别:全局、数据库。

    CREATE USER

    启用CREATE USERDROP USERRENAME USERREVOKE ALL PRIVILEGES。级别:全局。

    CREATE VIEW

    允许创建或更改视图。级别:全局、数据库、表。

    DELETE

    启用DELETE. 级别:全局、数据库、表。

    DROP

    允许删除数据库、表和视图。级别:全局、数据库、表。

    EVENT

    启用定时任务。级别:全局、数据库。

    EXECUTE

    使用户能够执行存储过程。级别:全局、数据库、存储过程。

    FILE

    使用户能够使服务器读取或写入文件。级别:全局。

    GRANT OPTION

    允许向其他账户授予权限或从其他账户删除权限。级别:全局、数据库、表、存储过程、代理。

    INDEX

    允许创建或删除索引。级别:全局、数据库、表。

    INSERT

    启用INSERT。级别:全局、数据库、表、列。

    LOCK TABLES

    在具有SELECT权限的表上启用LOCK TABLES 。级别:全局、数据库。

    PROCESS

    使用户能够通过SHOW PROCESSLIST查看所有正在运行的线程. 级别:全局。

    PROXY

    启用用户代理。级别:从用户到用户。

    REFERENCES

    启用外键创建。级别:全局、数据库、表、列。

    RELOAD

    启用FLUSH操作的使用。级别:全局。

    REPLICATION CLIENT

    使用户能够查询源服务器或副本服务器的位置。级别:全局。

    REPLICATION SLAVE

    允许副本从源读取二进制日志。级别:全局。

    SELECT

    启用使用SELECT。级别:全局、数据库、表、列。

    SHOW DATABASES

    启用SHOW DATABASES以显示所有数据库。级别:全局。

    SHOW VIEW

    启用SHOW CREATE VIEW。级别:全局、数据库、表。

    SHUTDOWN

    启用mysqladmin shutdown的使用。级别:全局。

    SUPER

    启用其他管理操作,例如 CHANGE MASTER TOKILLPURGE BINARY LOGSSET GLOBALmysqladmin debug命令。级别:全局。

    TRIGGER

    启用触发器操作。级别:全局、数据库、表。

    UPDATE

    启用UPDATE。 级别:全局、数据库、表、列。

    USAGE

    等价于“没有特权”。

    GaussDB数据库以对象划分支持以下权限:

    表2 GaussDB数据库支持的赋权类型

    授权对象

    支持授予的权限

    数据库

    CREATE、CONNECT、TEMPORARY、TEMP、ALTER、DROP、COMMENT

    模式

    CREATE、USAGE、ALTER、DROP、COMMENT

    表、视图

    SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、TRIGGER、ALTER、DROP、COMMENT、INDEX、VACUUM

    SELECT、INSERT、UPDATE、REFERENCES、COMMENT

    序列

    SELECT、USAGE、UPDATE、ALTER、DROP、COMMENT

  • MySQL通过'*.*'表示全局层级的授权对象;GaussDB通过'{DATABASE} db_name'表示数据库层级的授权对象。GaussDB的数据库层级对应MySQL的全局层级。
  • MySQL通过'schema_name.*'表示数据库/模式层级的授权对象;GaussDB通过'{SCHEMA} schema_name'表示模式层级的授权对象。GaussDB的模式层级对应MySQL的数据库/模式层级。
  • MySQL中用户名为两部分:用户名@主机名;GaussDB数据库当前仅支持用户名。
  • MySQL支持在GRANT赋权语法中修改用户验证,安全连接,资源参数属性,即auth_option、tls_option和resource option;GaussDB数据库赋权语法中不支持以上特性,需使用CREATE USER、ALTER USER设置用户相关属性。
  • MySQL支持用户代理赋权,GRANT PROXY ON主要用于对多个用户进行统一的权限管理。MySQL 5.7未提供角色机制,而在MySQL 8.0和GaussDB数据库中都提供了角色机制。角色能满足用户对于多个用户权限统一管控的目标,可以替代GRANT PROXY ON。
  • GaussDB数据库拥有public的概念,所用用户都拥有public的权限,部分系统表、系统视图可供所有用户查询。用户可以对public所拥有的权限进行grant和revoke;MySQL中,新创建的用户只拥有全局的usage权限,这个权限很小,几乎为0,只有连接数据库和查询information_schema 数据库的权限。
  • GaussDB数据库中,对象的所有者缺省具有该对象上的所有权限,出于安全考虑所有者可以舍弃部分权限,但ALTER、DROP、COMMENT、INDEX、VACUUM以及对象的可再授予权限属于所有者固有的权限,隐式拥有;MySQL中,没有owner的概念,即使用户创建了表,如果没赋予用户对应权限,那么用户也不能对其创建的表进行IUD等操作。
  • 在MySQL中,USAGE实际上表示无权限,所用用户都拥有该权限,当执行revoke或grant usage时,实际上不会进行任何修改;在GaussDB数据库中,USAGE权限如下:
    • 对于模式,USAGE允许访问包含在指定模式中的对象,若没有该权限,则只能看到这些对象的名称。
    • 对于序列,USAGE允许使用nextval函数。
  • 在GaussDB数据库中,支持给用户设置管理员角色,包括系统管理员(SYSADMIN)、安全管理员(CREATEROLE)、审计管理员(AUDITADMIN)、监控管理员(MONADMIN)、运维管理员(OPRADMIN)、安全策略管理员(POLADMIN)。默认情况下拥有SYSADMIN属性的系统管理员,具备系统最高权限。三权分立后,系统管理员将不再具有CREATEROLE属性(安全管理员)和AUDITADMIN属性(审计管理员)能力,即不再拥有创建角色和用户的权限,也不再拥有查看和维护数据库审计日志的权限;在MySQL中,不支持该用户设置管理员角色,也没有三权分立相关设计。
  • 在GaussDB数据库中,可以给用户赋予ANY权限,表示用户能够在非系统模式下拥有对应的权限,包括CREATE ANY TABLE、SELECT ANY TABLE、CREATE ANY INDEX等;在MySQL中,不支持ANY权限的赋予。
  • MySQL中提供SHOW GRANTS查询用户权限;GaussDB数据库中,可以通过gsql客户端元命令'\l+'、'\dn+' 、'\dp'查询权限信息,也可以通过查询pg_namespace、pg_class、pg_attribute等系统表的权限相关字段查询权限信息。
  • MySQL中数据库、表、列被删除时,相关的授权信息在系统表中依然保留,如果重新创建同名对象用户依然拥有权限;GaussDB数据库中当数据库、表、列被删除时,相关的授权信息会被删除,在重新创建同名对象后需要重新授权。
  • MySQL在授予数据库层级的权限时,支持‘_’和‘%’对数据库名进行模糊匹配;GaussDB数据库不支持对象名模糊匹配,‘_’或‘%’等特殊字符被识别为普通字符。
  • MySQL中,GRANT语句中指定用户不存在时默认会创建该账户(此特性已在MySQL 8.0中移除);GaussDB数据库不支持给未创建用户赋权。