文档首页/ 云数据库 GaussDB/ 开发指南(分布式_V2.0-8.x)/ FAQ/ 为什么REVOKE某个用户的CONNECT ON DATABASE权限后还可以登录数据库?
更新时间:2024-11-12 GMT+08:00
分享

为什么REVOKE某个用户的CONNECT ON DATABASE权限后还可以登录数据库?

答:使用REVOKE CONNECT ON DATABASE dbname FROM u1命令撤销u1的权限后,因为数据库的CONNECT权限授予了public,需要指定public来实现。

  • GaussDB提供了一个隐式定义的拥有所有角色组public,所有创建的用户和角色默认拥有public所拥有的权限。需要撤销或重新授予用户和角色public的权限,可通过GRANT和REVOKE指定关键字public实现。
  • GaussDB会将某些类型的对象上的权限授予public。默认情况以下这些对象的权限会授予public:
    • 数据库的CONNECT权限。
    • CREATE TEMP TABLE权限。
    • 函数的EXECUTE权限。
    • 语言和数据类型(包括域)的USAGE权限。
  • 对象的拥有者可以撤销默认授予public的权限,并授予权限给其他用户。

具体示例如下:

  1. 创建用户u1和数据库db_test。
    gaussdb=# CREATE USER u1 PASSWORD '********';
    gaussdb=# CREATE DATABASE db_test;
  2. 测试确定u1用户可以正常连接数据库test。后退出数据库。
    gsql -d db_test -h xxx.xxx.xxx.xxx -p xxxx -U u1 -W '********'
  3. 执行REVOKE命令撤销public连接db_test的权限。
    gaussdb=# REVOKE CONNECT ON DATABASE db_test FROM public;
  4. 验证结果,使用u1连接数据库。结果显示u1用户已经无法连接数据库。
    gsql -d db_test -h xxx.xxx.xxx.xxx -p xxxx -U u1 -W '********'
    gsql: FATAL:  permission denied for database "db_test"
    DETAIL:  User does not have CONNECT privilege.
    
    --删除。
    gaussdb=# DROP USER u1;
    gaussdb=# DROP DATABASE db_test;

相关文档