可以使用下列一种方法撤消创建 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 架构集合
在服务器上使用 XML 架构集合的准则和限制
XML 架构集合的权限