撤销对 XML 架构集合的权限

可以使用下列方法之一撤消创建 XML 架构集合的权限:

  • 撤消关系架构的 ALTER 权限。 然后,主体无法在关系架构中创建 XML 架构集合。 但是,主体仍可以在同一数据库中的其他关系架构中执行此作。

  • 撤消对主体数据库的 ALTER ANY SCHEMA 权限。 然后,主体无法在数据库中的任何位置创建 XML 架构集合。

  • 撤消对主体数据库的 CREATE XML SCHEMA COLLECTION 或 ALTER XML SCHEMA COLLECTION 权限。 这可以防止主体在数据库中导入 XML 架构集合。 撤消对数据库的 ALTER 或 CONTROL 权限具有相同的效果。

撤消对现有 XML 架构集合对象的权限

以下是可以对 XML 架构集合和结果撤消的权限:

  • 撤消 ALTER 权限会撤销主体修改 XML 架构集合的内容的能力。

  • 撤销 TAKE OWNERSHIP 权限会撤销主体转移 XML 架构集合的所有权的能力。

  • 撤销 REFERENCES 权限将撤销主体使用 XML 架构集合来对表和视图中的 xml 类型列以及参数进行键入或约束的能力。 它还撤消从其他 XML 架构集合引用此架构集合的权限。

  • 撤消 VIEW DEFINITION 权限会撤销主体查看 XML 架构集合的内容的能力。

  • 撤消 EXECUTE 权限会撤销主体在 XML 集合键入或约束的列、变量和参数中插入或更新值的能力。 它还会撤销查询此类 xml 类型列、变量或参数的功能。

例子

以下示例中的方案说明了 XML 架构权限的工作原理。 每个示例创建必要的测试数据库、关系架构和登录名。 这些登录名被授予必要的 XML 架构集合权限。 每个示例在末尾执行必要的清理。

答: 撤消创建 XML 架构集合的权限

此示例创建登录名和示例数据库。 它还会在数据库中添加关系架构。 最初,为登录名授予对关系架构和其他必要权限的 ALTER 权限,以创建 XML 架构集合。 然后,该示例撤消对数据库中某个关系架构的 ALTER 权限。 这可以阻止登录过程中创建 XML 架构集合。

setuser  
go  
create login TestLogin1 with password='SQLSvrPwd1'  
go  
create database SampleDBForSchemaPermissions  
go  
use SampleDBForSchemaPermissions  
go  
-- Create another relational schema in the db (in addition to dbo schema)  
CREATE SCHEMA myOtherDBSchema  
go  
CREATE USER TestLogin1  
go  
-- For TestLogin1 to create/import XML schema collection, following  
-- permission needed  
-- CREATE XML SCHEMA is a database level permission  
GRANT CREATE XML SCHEMA COLLECTION TO TestLogin1  
go  
GRANT ALTER ON SCHEMA::myOtherDBSchema TO TestLogin1  
go  
GRANT ALTER ON SCHEMA::dbo TO TestLogin1  
go  
-- Now TestLogin1 can import an XML schema collection in both relational schemas.  
setuser 'TestLogin1'  
go  
CREATE XML SCHEMA COLLECTION dbo.myTestSchemaCollection AS '<?xml version="1.0" encoding="UTF-8" ?>  
  
<xsd:schema targetNamespace="http://schemas.adventure-works.com/Additional/ContactInfo"   
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
elementFormDefault="qualified">  
<xsd:element name="telephone" type="xsd:string" />  
</xsd:schema>'  
go  
-- TestLogin1 can create XML schema collection in myOtherDBSchema relational schema  
CREATE XML SCHEMA COLLECTION myOtherDBSchema.myTestSchemaCollection AS '<?xml version="1.0" encoding="UTF-8" ?>  
  
<xsd:schema targetNamespace="http://schemas.adventure-works.com/Additional/ContactInfo"   
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
elementFormDefault="qualified">  
<xsd:element name="telephone" type="xsd:string" />  
</xsd:schema>'  
go  
-- Let us drop XML schema collections from both relational schemas  
DROP XML SCHEMA COLLECTION myOtherDBSchema.myTestSchemaCollection  
go  
DROP XML SCHEMA COLLECTION dbo.myTestSchemaCollection  
go  
-- now REVOKE permission from TestLogin1 to alter myOtherDBSchema  
setuser  
go  
REVOKE ALTER ON SCHEMA::myOtherDBSchema FROM TestLogin1  
go  
-- now TestLogin1 cannot create xml schema collection in myOtherDBSchema  
setuser 'TestLogin1'  
go  
CREATE XML SCHEMA COLLECTION myOtherDBSchema.myTestSchemaCollection AS '<?xml version="1.0" encoding="UTF-8" ?>  
<xsd:schema targetNamespace="http://schemas.adventure-works.com/Additional/ContactInfo"   
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
elementFormDefault="qualified">  
<xsd:element name="telephone" type="xsd:string" />  
</xsd:schema>'  
go  
  
-- TestLogin1 can still create XML schema collections in dbo  
-- It cannot create XML schema collections anywhere in the database  
-- if we REVOKE CREATE XML SCHEMA COLLECTION permission  
SETUSER  
go  
REVOKE CREATE XML SCHEMA COLLECTION FROM TestLogin1  
go  
  
setuser 'TestLogin1'  
go  
-- the following now should fail  
CREATE XML SCHEMA COLLECTION dbo.myTestSchemaCollection AS '<?xml version="1.0" encoding="UTF-8" ?>  
<xsd:schema targetNamespace="http://schemas.adventure-works.com/Additional/ContactInfo"   
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
elementFormDefault="qualified">  
<xsd:element name="telephone" type="xsd:string" />  
</xsd:schema>'  
go  
  
-- Final cleanup  
SETUSER  
go  
USE master  
go  
DROP DATABASE SampleDBForSchemaPermissions  
go  
DROP LOGIN TestLogin1  
Go  

另请参阅

XML 数据 (SQL Server)
类型化的 XML 与非类型化的 XML 的比较
XML 架构集合 (SQL Server)
服务器上的 XML 架构集合的要求和限制