帐户、密码、权限 实现原理 通过创建INDEPENDENT属性的用户来实现。 操作步骤 1.使用系统管理员dbadmin连接DWS数据库。 2.执行以下SQL语句创建私有用户u1。 CREATE USER u1 WITH INDEPENDENT IDENTIFIED BY "password"; 3.使用u1重新连接DWS数据库,创建测试表,并插入数据。 CREATE TABLE test (id INT, name VARCHAR(20)); INSERT INTO test VALUES (1, 'joe'); INSERT INTO test VALUES (2, 'jim'); 4.切换成dbadmin用户重新连接DWS数据库,并执行以下SQL语句验证是否可以访问,结果提示无权访问。 SELECT FROM u1.test; 5.执行控制语句DROP,仍然可以删除成功。 DROP TABLE u1.test; 如何REVOKE某用户的connect on database权限? DWS提供了一个隐式定义的拥有所有角色的组PUBLIC,所有创建的用户和角色默认拥有PUBLIC所拥有的权限。要撤销或重新授予用户和角色对PUBLIC的权限, 可通过在GRANT和REVOKE指定关键字PUBLIC实现。 DWS会将某些类型的对象上的权限授予PUBLIC。默认情况下,对表、表字段、序列、外部数据源、外部服务器、模式或表空间对象的权限不会授予PUBLIC,而以下这些对象的权限会授予PUBLIC:数据库的CONNECT权限和CREATE TEMP TABLE权限、函数的EXECUTE特权、语言和数据类型(包括域)的USAGE特权。当然,对象拥有者可以撤销默认授予PUBLIC的权限并专门授予权限给其他用户。为了更安全,建议在同一个事务中创建对象并设置权限,这样其他用户就没有时间窗口使用该对象。另外,这些初始的默认权限可以使用ALTER DEFAULT PRIVILEGES命令修改。 可参考以下示例,REVOKE某用户的connect on database权限: 1.执行以下命令连接DWS 集群的默认数据库postgres: gsql d postgres h 192.168.0.89 U dbadmin p 8000 r 根据界面提示输入密码后,显示如下信息表示gsql工具已经连接成功: postgres> 2.创建用户u1。 CREATE USER u1 IDENTIFIED BY 'password'; CREATE USER 3.确认u1正常访问。 gsql d postgres h 192.168.0.89 U u1 p 8000 W password r gsql ((GaussDB 8.1.0 build be03b9a0) compiled at 20210312 14:18:02 commit 1237 last mr 2001 release) SSL connection (protocol: TLSv1.3, cipher: TLSAES128GCMSHA256, bits: 128) Type "help" for help. 4.撤销public的connect on database权限。 gsql d postgres h 192.168.0.89 U dbadmin p 8000 r postgres> 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 postgres h 192.168.0.89 U u1 p 8000 gsql: FATAL: permission denied for database "gaussdb" DETAIL: User does not have CONNECT privilege.