可以使用下列方法之一撤消创建 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 架构集合的要求和限制