XML スキーマ コレクションに対する権限の取り消し

適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance

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="https://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="https://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="https://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="https://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

関連項目