撤消对 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 架构集合权限。 每个示例在结束时都会进行必要的清除操作。

A. 撤消创建 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 架构集合的要求和限制