帐户、密码、权限 本章节主要介绍操作类问题中有关帐户、密码、权限的问题。 DWS如何实现业务隔离 业务隔离 DWS中可以使用Database和Schema实现业务的隔离,区别在于: Database之间无法直接互访,通过连接隔离实现彻底的权限隔离。各个Database之间共享资源极少,可实现连接隔离、权限隔离等。 Schema隔离的方式共用资源较多,可以通过GRANT与REVOKE语法便捷地控制不同用户对各Schema及其下属对象的权限,从而赋给业务更多的灵活性。 从便捷性和资源共享效率上考虑,推荐使用Schema进行业务隔离。建议系统管理员创建Schema和Database,再赋予相关用户对应的权限。 权限控制 DATABASE 数据库Database是数据库对象的物理集合,不同Database之间资源完全隔离(除部分共享对象之外)。即Database是对业务的物理隔离,不同Database的之间的对象不能相互访问。比如在Database A中无法访问Databse B中的对象。因此登录集群的时候必须显示指定要连接的Databse。 SCHEMA 数据库里面通过Schema把数据库对象进行逻辑划分,在Database中,通过Schema实现对数据库对象的逻辑隔离。 通过权限管理实现在同一个session下对不同Schema下对象的访问和操作权限。Schema下则是各种应用程序会接触到的对象,比如表,索引,数据类型,函数,操作符等。 同一个Schema下,不能存在同名的数据库对象;但是不同Schema下的对象名可以重复。 gaussdb> CREATE SCHEMA myschema; CREATE SCHEMA gaussdb> CREATE SCHEMA myschema1; CREATE SCHEMA gaussdb> CREATE TABLE myschema.t1(a int, b int) DISTRIBUTE BY HASH(b); CREATE TABLE gaussdb> CREATE TABLE myschema.t1(a int, b int) DISTRIBUTE BY HASH(b); ERROR: relation "t1" already exists gaussdb> CREATE TABLE myschema1.t1(a int, b int) DISTRIBUTE BY HASH(b); CREATE TABLE Schema实现了对业务的逻辑划分,反过来这些业务对象也对Schema形成一种依赖关系,因此当Schema下存在对象时,删除Schema的时候会报错,并提示具体的依赖信息。 gaussdb> DROP SCHEMA myschema1; ERROR: cannot drop schema myschema1 because other objects depend on it Detail: table myschema1.t1 depends on schema myschema1 Hint: Use DROP ... CASCADE to drop the dependent objects too. 当删除Schema的时候加上CASCADE选项,把Schema以及依赖此Schema的选项连带删除。 gaussdb> DROP SCHEMA myschema1 CASCADE; NOTICE: drop cascades to table myschema1.t1 gaussdb> DROP SCHEMA