DROP SECURITY 语句

使用 DROP SECURITY 语句从当前数据库中删除现有的安全对象。此对象可以是安全策略、安全标签或安全标签组件。

该语句是 SQL ANSI/ISO 标准的扩展。

语法

元素 描述 限制 语法
component 要删除的安全标签组件 必须在数据库中存在 标识符
label 要删除的安全标签 必须作为指定 policy 的标签存在于数据库中 标识符
policy 要删除的安全策略 必须在数据库中存在 标识符

用法

只有 DBSECADM 能发出此语句。当成功执行 DROP SECURITY 语句后,数据库服务器从系统目录的表中删除引用指定对象的名称和数字标识符的任何行,这些表为:
  • 对于安全策略是 sysecpolicies
  • 对于安全标签是 sysseclabels
  • 对于安全标签组件是 sysseclabelcomponents
跟随在 SECURITY 关键字之后的关键字标识正在删除的安全对象的类型。
  • SECURITY POLICY policy 指定一个安全策略
  • SECURITY LABEL policy.label 指定一个安全标签
  • SECURITY LABEL COMPONENT component 指定一个安全标签组件。

没有 SQL 语句可以在不会破坏整个组件的情况下选择性地删除安全标签组件的某些元素。要从数据库中只删除安全标签组件的一部分元素,DBSECADM 可以使用 DROP SECURITY LABEL COMPONENT 语句删除组件,然后使用 CREATE SECURITY LABEL COMPONENT 语句重新定义删除的子句,但不包括任何不再需要的元素。(另一种方法是删除包含已弃用元素的所有安全标签,然后使用 CREATE SECURITY LABEL 语句重新定义具有已删除标签相同的组件的新标签,但不包含这些元素。在这种情况下,已弃用的元素将保留在数据库中,但是没有安全标签会将它们用作组件的值。)

如果您包含了可选的 IF EXISTS 关键字,则如果在当前数据库中未注册指定的安全对象类型和指定名称的安全对象,则数据库服务器不会执行任何操作(而不是向应用程序发送异常)。

示例

以下语句指示数据库服务器删除安全标签 witty
DROP SECURITY LABEL witty;
如果有列被 witty 标签保护或者有用户持有此标签,则该语句失败。
下一个示例指示数据库服务器从数据库中删除安全标签组件 adhesive
DROP SECURITY LABEL COMPONENT adhesive;
如果安全策略取决于 adhesive 安全标签组件,则该语句失败。
以下示例指示数据库服务器以 CASCADE 方式删除 best 安全策略:
DROP SECURITY POLICY best CASCADE;
如果该策略正在包含任何表,则该语句失败。但是,如果该语句成功,则因为 CASCADE 规范它会产生以下附加的影响:
  • 所有与 best 安全策略的相关联的安全标签都会被删除。
  • 所有 best 安全策略撤销的豁免权。
  • 由于 best 安全策略而删除的所有安全标签都将从拥有这些标签的所有用户中撤销。