
TRANSFER OWNERSHIP 语句
FL 500 TRANSFER OWNERSHIP 语句将数据库或系统对象的所有权从一个所有者转移到另一个所有者。 新所有者可以是授权ID或角色。
调用 TRANSFER OWNERSHIP
此语句可嵌入应用程序中或者以交互方式发出。 这是一个可执行语句,只有在DYNAMICRULES RUN行为生效时才能动态准备。 更多信息,请参阅授权ID和动态SQL。
授权 TRANSFER OWNERSHIP
如果语句是动态准备的,则权限集是指进程的 SQL 授权 ID 拥有的权限,除非进程处于可信上下文中,并且指定了 ROLE AS OBJECT OWNER AND QUALIFIER 子句。 如果“作为对象所有者的角色”生效,则该角色必须拥有特权集的特权。
特权套装必须至少包含以下一项特权:
- 对象的所有权
- SECADM 权限
无论 SEPARATE_SECURITY 子系统参数设置如何,始终需要明确的 SECADM 授权。 更多信息,请参阅分离SYSADM权限。
如果访问控制授权出口处于活动状态, 将调用该出口以检查SECADM权限。 Db2 无论 SEPARATE_SECURITY 系统参数值如何,仅检查 SECADM 权限。
语法 TRANSFER OWNERSHIP
对象:
新主人:
描述 TRANSFER OWNERSHIP
- DATABASE 数据库名称
- 确定所有权转让的数据库。 数据库必须存在于当前服务器上。 数据库名称不得包含 DSNDB01、 DSNDB04、 DSNDB06 或任何由SYSIBM隐式创建的数据库。 当数据库的所有权发生转移时, SYSIBM.SYSDATABASE 中数据库的CREATOR和CREATORTYPE值将更新为新所有者的授权ID或角色和类型。 转让数据库的所有权并不转让当前所有者创建的数据库中任何其他对象的所有权。
- INDEX 索引名称
- 确定所有权转让的索引。 索引必须存在于当前服务器上。 索引不能定义在目录表、目录表或已声明的临时表上。 当索引的所有权发生转移时, SYSIBM.SYSINDEXES 中索引的OWNER和OWNERTYPE值将更新为新所有者的授权ID或角色和类型。
- STOGROUP 用户组名称
- 确定所有权转让的存储组。 存储组必须存在于当前服务器中。 当存储组的所有权发生转移时, SYSIBM.SYSSTOGROUP 中该组的CREATOR和CREATORTYPE值将更新为新所有者的授权ID或角色和类型。
- TABLE 表名
- 确定所有权转让的表格。
该表必须存在于当前服务器上,且不能是视图、目录表、目录表、带有安全标签列的表或为XML列隐式创建的表。
如果表格由限定名称引用,则该名称可以是两部分或三部分组成的名称。 如果使用由三部分组成的名称,则第一部分必须与当前服务器上安装面板 DSNTIPR 中的字段 Db2 位置名称的值相匹配。 如果当前服务器不是本地服务器 Db2 ,则该名称不一定是当前服务器特殊寄存器中的名称。如果表名是表的别名,并且指定了别名 ,则表的拥有权将转移给新的拥有者,而别名保持不变。
当表的拥有权发生转移时,如果表和隐式创建的对象拥有相同的拥有者,则任何隐式创建的对象(例如表空间、辅助表、辅助表空间、XML表、XML表空间或索引)的拥有权也会发生转移。 此外,如果表和显式创建的对象拥有相同的所有者,则显式创建的辅助表或辅助表空间的所有权也会转移。
当表的所有权发生转移时, SYSIBM.SYSTABLES 中表的OWNER和OWNERTYPE值将更新为新所有者的授权ID或角色和类型。 - TABLESPACE 表空间名称
- 确定所有权转让的表格空间。 表空间必须存在于当前服务器上,但不得为XML列隐式创建。
数据库不得为 DSNDB01 或 DSNDB06。
省略数据库名称隐式指定。 DSNDB04 当表空间的所有权发生转移时, SYSIBM.SYSTABLESPACE 中表空间的 CREATOR 和 CREATORTYPE 值将根据授权 ID 或角色以及新所有者的类型进行更新。 - VIEW 视图名称
- 确定所有权转让的视图。 当前服务器上必须存在该视图。 如果视图由限定名称引用,则该名称可以是两部分或三部分组成的名称。 如果使用由三部分组成的名称,则第一部分必须与当前服务器上安装面板 DSNTIPR 中的字段 Db2 位置名称的值相匹配。 如果当前服务器不是本地服务器 Db2 ,则该名称不一定是当前服务器特殊寄存器中的名称。
如果视图名称是视图的别名,且指定了别名名称 ,则视图的所有权将转移给新所有者,别名保持不变。
当视图的所有权发生转移时, SYSIBM.SYSTABLES 和 SYSIBM.SYSVIEWS 中视图的OWNER和OWNERTYPE值将更新为授权ID或角色以及新所有者的类型。 - TO
- 指定授权ID或对象所有权转移后的角色。
- ROLE 角色名称
- 指定对象所有权转移后的角色。 新角色必须在当前服务器上存在。
- USER 授权名称
- 指定对象所有权转移的授权ID。
- SESSION_USER
- 指定将 SESSION_USER 特殊寄存器的值用作对象所有权转移的授权 ID。
- REVOKE PRIVILEGES
- 指定当前所有者不再拥有对对象的任何隐式权限。 当前所有者的相应授权缓存条目将被清除。
如果任何包或对象依赖于当前所有者对语句对象所拥有的隐式特权,则 TRANSFER OWNERSHIP 语句会因现有特权被撤销而失败。 为了确保当前车主能够继续使用这些附属软件包,在执行转让所有权声明之前,必须从其他来源明确授权当前车主。 例如,假设用户创建了一个引用其某个表的程序包。 用户对他们创建的表拥有隐式的 SELECT 权限。 要将该表转让给其他所有者并继续使用该软件包,必须在执行 TRANSFER OWNERSHIP 语句之前明确授予用户表的 SELECT 权限。
备注 TRANSFER OWNERSHIP
- 转让所有权声明不会改变转让对象的架构。
- 任何系统对象,如果其OWNER为SYSIBM或模式以SYS开头,则不能进行转让。
- 新车主自动获得与当前车主在物品创建时所拥有的相同特权。 例如,如果当前所有者拥有数据库创建时授予的数据库管理员权限,则新所有者将自动获得数据库管理员权限。
- SECADM授权的授权ID不能将物品的所有权转移给自己。
- Db2 当物品的当前所有者试图将所有权转移给自己时,系统会发出警告。
- 如果当前物品的所有者是一个角色,则在物品所有权转移时,该角色在 SYSIBM.SYSOBJROLEDEP 中的依赖关系记录将被删除。 如果新所有者是一个角色,则该角色的依赖关系记录将添加到 SYSIBM.SYSOBJROLEDEP。
- SECADM或ACCESSCTRL权限可以使用带BY子句的REVOKE语句来撤销当前所有者授予对象的任何权限。
- 当物品的所有权发生转移时,新所有者必须拥有与物品依赖记录中指定的相同特权。 特权是物品继续存在的前提。 新所有者不需要创建对象所需的额外权限。 请看以下例子。
- 如果视图对基础表有 SELECT 和 INSERT 依赖关系,则在所有权转移时,必须授予视图的新所有者相同的 SELECT 和 INSERT 权限。 如果相关权限是 SELECT WITH GRANT OPTION 和 INSERT WITH GRANT OPTION,则必须授予新所有者相同的 SELECT WITH GRANT OPTION 和 INSERT WITH GRANT OPTION 权限。
- 如果视图依赖于某个例程,且当视图的所有权发生转移时,新所有者必须被授予对依赖例程的 EXECUTE 权限。
- 如果表格具有独特的类型列,当表格的所有权发生转移时,必须授予新所有者对该独特类型的“使用”权限。
例子 TRANSFER OWNERSHIP
TRANSFER OWNERSHIP OF DATABASE DBCC001 TO USER USRT001
REVOKE PRIVILEGES;
TRANSFER OWNERSHIP OF DATABASE DBCC002 TO ROLE OWNRROLE
REVOKE PRIVILEGES;
TRANSFER OWNERSHIP OF DATABASE DBCC003 TO SESSION_USER
REVOKE PRIVILEGES;
TRANSFER OWNERSHIP OF TABLE EMPLOYEE.DEPT TO ROLE TBOWNR_ROLE
REVOKE PRIVILEGES;
TRANSFER OWNERSHIP OF INDEX EMPLOYEE.SALARYIX TO USER IXOWNER
REVOKE PRIVILEGES;

