
# 用户与权限
表1M-Compatibility与GaussDB的语法差异 
| 序号 | 语法说明                     | 概述                                          | M-Compatibility与GaussDB的差异                                                                                                                                 |
|:---|:---|:---|:---|
| 1  | CREATE ROLE              | 创建一个角色。                                     | 在M-Compatibility中， 不支持指定涉及以下关键字的选项：ENCRYPTED、UNENCRYPTED、RESOURCE POOL、PERM SPACE、TEMP SPACE、SPILL SPACE。 |
| 2  | CREATE USER              | 创建一个用户。                                     | 在M-Compatibility中， 不支持指定涉及以下关键字的选项：ENCRYPTED、UNENCRYPTED、RESOURCE POOL、PERM SPACE、TEMP SPACE、SPILL SPACE。 |
| 3  | CREATE GROUP             | 创建一个新用户组。CREATE GROUP是CREATE ROLE的别名，不推荐使用。 | 在M-Compatibility中， 不支持指定涉及以下关键字的选项：ENCRYPTED、UNENCRYPTED、RESOURCE POOL、PERM SPACE、TEMP SPACE、SPILL SPACE。 |
| 4  | ALTER ROLE               | 修改角色属性。                                     | 在M-Compatibility中， 不支持指定涉及以下关键字的选项：ENCRYPTED、UNENCRYPTED、RESOURCE POOL、PERM SPACE、TEMP SPACE、SPILL SPACE。 |
| 5  | ALTER USER               | 修改用户属性。                                     | 在M-Compatibility中， 不支持指定涉及以下关键字的选项：ENCRYPTED、UNENCRYPTED、RESOURCE POOL、PERM SPACE、TEMP SPACE、SPILL SPACE。 |
| 6  | ALTER GROUP              | 修改一个用户组的属性。                                 | -                                                                                                                                                          |
| 7  | DROP ROLE                | 删除角色。                                       | -                                                                                                                                                          |
| 8  | DROP USER                | 删除用户。                                       | -                                                                                                                                                          |
| 9  | DROP GROUP               | 删除用户组。                                      | -                                                                                                                                                          |
| 10 | DROP OWNED               | 删除一个数据库角色所拥有的数据库对象。                         | -                                                                                                                                                          |
| 11 | REASSIGN OWNED           | 修改数据库对象的属主。                                 | M-Compatibility中不支持该语法。                                                                                                                                    |
| 12 | GRANT                    | 对角色和用户进行授权操作。                               | M-Compatibility中不支持授予或回收函数、存储过程、表空间、DATABASE LINK等对象的权限。                                             |
| 13 | REVOKE                   | 用于撤销一个或多个角色的权限。                             | M-Compatibility中不支持授予或回收函数、存储过程、表空间、DATABASE LINK等对象的权限。                                             |
| 14 | ALTER DEFAULT PRIVILEGES | 设置应用于将来创建的对象的权限（这不会影响分配到已有对象中的权限）。          | M-Compatibility中不支持该语法。                                                                                                                                    |
   
- MySQL中通过'dbname.\*'表示模式层级的授权对象；在M-Compatibility中，使用'{DATABASE \| SCHEMA} dbname'表示模式层级的授权对象。
- MySQL中用户名为两部分：用户名@主机名；M-Compatibility当前仅支持用户名。
- MySQL支持在GRANT赋权语法中修改用户验证，安全连接，资源参数属性，即auth_option、tls_option和resource option；M-Compatibility赋权语法中不支持以上特性，需使用CREATE USER、ALTER USER设置用户相关属性。
- MySQL支持用户代理赋权，GRANT PROXY ON主要用于对多个用户进行统一的权限管理。MySQL5.7未提供角色机制，而在MySQL8.0和M-Compatibility中都提供了角色机制。角色能满足用户对于多个用户权限统一管控的目标，可以替代GRANT PROXY ON。
- M-Compatibility拥有public的概念，所用用户都拥有public的权限，部分系统表、系统视图可供所有用户查询。用户可以对public所拥有的权限进行grant和revoke；MySQL中，新创建的用户只拥有全局的usage权限，这个权限很小，几乎为0，只有连接数据库和查询information_schema 数据库的权限。
- M-Compatibility中，对象的所有者缺省具有该对象上的所有权限，出于安全考虑所有者可以舍弃部分权限，但ALTER、DROP、COMMENT、INDEX、VACUUM以及对象的可再授予权限属于所有者固有的权限，隐式拥有；MySQL中，没有owner的概念，即使用户创建了表，如果没赋予用户对应权限，那么用户也不能对其创建的表进行IUD等操作。
- 在MySQL中，USAGE实际上表示无权限，所用用户都拥有该权限，当执行revoke或grant usage时，实际上不会进行任何修改；在M-Compatibility中，USAGE权限如下：
  - 对于模式，USAGE允许访问包含在指定模式中的对象，若没有该权限，则只能看到这些对象的名称。
  
  - 对于序列，USAGE允许使用nextval函数。
   
- 在M-Compatibility中，支持给用户设置管理员角色，包括系统管理员（SYSADMIN）、安全管理员（CREATEROLE）、审计管理员（AUDITADMIN）、监控管理员（MONADMIN）、运维管理员（OPRADMIN）、安全策略管理员（POLADMIN）。默认情况下拥有SYSADMIN属性的系统管理员，具备系统最高权限。三权分立后，系统管理员将不再具有CREATEROLE属性（安全管理员）和AUDITADMIN属性（审计管理员）能力，即不再拥有创建角色和用户的权限，也不再拥有查看和维护数据库审计日志的权限；在MySQL中，不支持该用户设置管理员角色，也没有三权分立相关设计。
- 在M-Compatibility中，可以给用户赋予ANY权限，表示用户能够在非系统模式下拥有对应的权限，包括CREATE ANY TABLE、SELECT ANY TABLE、CREATE ANY INDEX等；在MySQL中，不支持ANY权限的赋予。
- MySQL中提供SHOW GRANTS查询用户权限；M-Compatibility中，可以通过gsql客户端元命令'\\l+'、'\\dn+' 、'\\dp'查询权限信息，也可以通过查询pg_namespace、pg_class、pg_attribute等系统表的权限相关字段查询权限信息。
- MySQL中数据库、表、列被删除时，相关的授权信息在系统表中依然保留，如果重新创建同名对象用户依然拥有权限；M-Compatibility中当数据库、表、列被删除时，相关的授权信息会被删除，在重新创建同名对象后需要重新授权。
- MySQL在授予数据库层级的权限时，支持'_'和'%'对数据库名进行模糊匹配；M-Compatibility不支持对象名模糊匹配，'_'或'%'等特殊字符被识别为普通字符。
- MySQL中，GRANT语句中指定用户不存在时默认会创建该账户（此特性已在MySQL8.0中移除）；M-Compatibility不支持给未创建用户赋权。
 
