更新时间:2022-08-16 GMT+08:00

如何REVOKE某用户的connect on database权限?

GaussDB(DWS)提供了一个隐式定义的拥有所有角色的组PUBLIC,所有创建的用户和角色默认拥有PUBLIC所拥有的权限。要撤销或重新授予用户和角色对PUBLIC的权限, 可通过在GRANT和REVOKE指定关键字PUBLIC实现。

GaussDB(DWS)会将某些类型的对象上的权限授予PUBLIC。默认情况下,对表、表字段、序列、外部数据源、外部服务器、模式或表空间对象的权限不会授予PUBLIC,而以下这些对象的权限会授予PUBLIC:数据库的CONNECT权限和CREATE TEMP TABLE权限、函数的EXECUTE特权、语言和数据类型(包括域)的USAGE特权。当然,对象拥有者可以撤销默认授予PUBLIC的权限并专门授予权限给其他用户。为了更安全,建议在同一个事务中创建对象并设置权限,这样其他用户就没有时间窗口使用该对象。另外,这些初始的默认权限可以使用ALTER DEFAULT PRIVILEGES命令修改。

可参考以下示例,REVOKE某用户的connect on database权限:

  1. 执行以下命令连接GaussDB(DWS) 集群的默认数据库gaussdb

    gsql -d gaussdb -h 192.168.0.89 -U dbadmin -p 8000 -r

    根据界面提示输入密码后,显示如下信息表示gsql工具已经连接成功:

    1
    gaussdb=>
    

  2. 创建用户u1。

    CREATE USER u1 IDENTIFIED BY 'password';
    CREATE USER

  3. 确认u1正常访问。

    gsql -d gaussdb -h 192.168.0.89 -U u1 -p 8000 -W password -r
    gsql ((GaussDB 8.1.0 build be03b9a0) compiled at 2021-03-12 14:18:02 commit 1237 last mr 2001 release)
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_128_GCM_SHA256, bits: 128)
    Type "help" for help.

  4. 撤销public的connect on database权限。

    gsql -d gaussdb -h 192.168.0.89 -U dbadmin -p 8000 -r
    gaussdb=>
    
    REVOKE CONNECT ON database gaussdb FROM public;
    REVOKE

    若直接使用revoke connect on database postgres from u1命令撤销u1用户的权限不会生效,因为数据库的CONNECT权限授予了PUBLIC,需指定关键字PUBLIC实现。

  5. 验证结果,显示如下内容表示用户u1的connect on database权限已成功撤销。

    gsql -d gaussdb -h 192.168.0.89 -U u1 -p 8000
    gsql: FATAL:  permission denied for database "gaussdb"
    DETAIL:  User does not have CONNECT privilege.