新しい XML スキーマ コレクションを作成するか、既存の XML スキーマ コレクションを使用する権限を拒否できます。
XML スキーマ コレクションを作成するためのアクセス許可の拒否
XML スキーマ コレクションを作成するアクセス許可は、次の方法で拒否できます。
リレーショナル スキーマに対する ALTER 権限を拒否します。
リレーショナル スキーマと、含まれるすべてのオブジェクトに対するすべてのアクセス許可を拒否するには、リレーショナル スキーマに対する CONTROL を拒否します。
データベースの ALTER ANY SCHEMA を拒否します。 この場合、プリンシパルはデータベース内のどこにも XML スキーマ コレクションを作成できません。 また、データベースに対する ALTER 権限または CONTROL 権限を拒否すると、データベース内のすべてのオブジェクトに対するすべての権限が拒否されることにも注意してください。
XML スキーマ コレクション オブジェクトに対する権限の拒否
既存の XML スキーマ コレクションで拒否できるアクセス許可と結果を次に示します。
ALTER 権限を拒否すると、プリンシパルは XML スキーマ コレクションの内容を変更できなくなります。
CONTROL 権限を拒否すると、プリンシパルは XML スキーマ コレクションに対して任意の操作を実行できなくなります。
REFERENCES 権限を拒否すると、XML スキーマ コレクションを使用して XML 型の列とパラメーターを入力または制約する権限がプリンシパルに拒否されます。 また、他の XML スキーマ コレクションからこの XML スキーマ コレクションを参照する権限もプリンシパルから拒否されます。
VIEW DEFINITION 権限を拒否すると、プリンシパルは XML スキーマ コレクションの内容を表示できなくなります。
EXECUTE 権限を拒否すると、XML スキーマ コレクションによって型指定または制約された列、変数、およびパラメーターの値を挿入または更新する権限がプリンシパルによって拒否されます。 また、同じ xml 型の列と変数の値に対してクエリを実行する機能もプリンシパルから拒否されます。
例示
次の例のシナリオは、XML スキーマのアクセス許可のしくみを示しています。 各例では、必要なテスト データベース、リレーショナル スキーマ、ログインを作成します。 これらのログインには、必要な XML スキーマ コレクションのアクセス許可が付与されます。 各例では、最後に必要なクリーンアップを行います。
ある。 ユーザーが XML スキーマ コレクションを作成できないようにする
ユーザーが XML スキーマ コレクションを作成できないようにする方法の 1 つは、リレーショナル スキーマに対する ALTER 権限を拒否することです。 これを次の例に示します。
この例では、ユーザー、 TestLogin1
、およびデータベースを作成します。 また、 dbo
スキーマに加えて、リレーショナル スキーマをデータベースに作成します。 最初に、 CREATE XML SCHEMA
権限を使用すると、ユーザーはデータベース内の任意の場所にスキーマ コレクションを作成できます。 例がリレーショナルスキーマの1つにおけるALTER
のユーザーに対するアクセス許可を拒否します。 これにより、ユーザーはそのリレーショナル スキーマで XML スキーマ コレクションを作成できなくなります。
CREATE LOGIN TestLogin1 WITH password='SQLSvrPwd1'
GO
CREATE DATABASE SampleDBForSchemaPermissions
GO
USE SampleDBForSchemaPermissions
GO
-- Create another relational schema in the database.
CREATE SCHEMA myOtherDBSchema
GO
CREATE USER TestLogin1
GO
-- For TestLogin1 to create/import XML schema collection, following
-- permission needed.
-- Database-level permissions
GRANT CREATE XML SCHEMA COLLECTION TO TestLogin1
GO
GRANT ALTER ANY SCHEMA TO TestLogin1
GO
-- Now TestLogin1 can import an XML schema collection.
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
DROP XML SCHEMA COLLECTION myOtherDBSchema.myTestSchemaCollection
GO
-- Now deny permission from TestLogin1 to alter myOtherDBSchema.
setuser
GO
DENY ALTER ON SCHEMA::myOtherDBSchema TO TestLogin1
GO
-- Now TestLogin1 cannot create xml schema collection.
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
-- Final cleanup
SETUSER
GO
USE master
GO
DROP DATABASE SampleDBForSchemaPermissions
GO
DROP LOGIN TestLogin1
GO
B. XML スキーマ コレクションに対するアクセス許可の拒否
次の例は、既存の XML スキーマ コレクションに対する特定のアクセス許可をログインに拒否する方法を示しています。 この例では、既存の XML スキーマ コレクションに対する REFERENCES アクセス許可がテスト ログインで拒否されています。
この例では、ユーザー、 TestLogin1
、およびデータベースを作成します。 また、 dbo
スキーマに加えて、リレーショナル スキーマをデータベースに作成します。 最初に、 CREATE XML SCHEMA
権限を使用すると、ユーザーはデータベース内の任意の場所にスキーマ コレクションを作成できます。
XML スキーマ コレクションに対する REFERENCES
権限を使用すると、スキーマ TestLogin1
使用して、型指定された xml
列をテーブルに作成できます。 XML スキーマ コレクションに対する REFERENCES
権限が拒否された場合、 TestLogin1
は XML スキーマ コレクションを使用できなくなります。
CREATE LOGIN TestLogin1 WITH password='SQLSvrPwd1'
GO
CREATE DATABASE SampleDBForSchemaPermissions
GO
USE SampleDBForSchemaPermissions
GO
-- Create another relational schema in the database.
CREATE SCHEMA myOtherDBSchema
GO
CREATE USER TestLogin1
GO
-- For TestLogin1 to create/import XML schema collection, the following
-- permission is required.
-- Database-level permissions
GRANT CREATE XML SCHEMA COLLECTION TO TestLogin1
GO
GRANT ALTER ANY SCHEMA TO TestLogin1
GO
-- Now TestLogin1 can import an XML schema collection.
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
-- Grant permission to TestLogin1 to create a table and reference the XML schema collection.
SETUSER
GO
GRANT CREATE TABLE TO TestLogin1
GO
-- The user also needs REFERENCES permission to use the XML schema collection
-- to create a typed XML column (REFERENCES permission on the schema
-- collection is not needed).
GRANT REFERENCES ON XML SCHEMA COLLECTION::myOtherDBSchema.myTestSchemaCollection
TO TestLogin1
GO
--TestLogin1 can use the schema.
CREATE TABLE T(i int, x xml (myOtherDBSchema.myTestSchemaCollection))
GO
-- Drop the table.
DROP TABLE T
GO
-- Now deny REFERENCES permission to TestLogin1 on the schema created previously.
SETUSER
GO
DENY REFERENCES ON XML SCHEMA COLLECTION::myOtherDBSchema.myTestSchemaCollection TO TestLogin1
GO
-- Now TestLogin1 cannot create xml schema collection
SETUSER 'TestLogin1'
GO
-- Following statement fails. TestLogin1 does not have REFERENCES
-- permission on the XML schema collection.
CREATE TABLE T(i int, x xml (myOtherDBSchema.myTestSchemaCollection))
GO
-- Final cleanup
SETUSER
GO
USE master
GO
DROP DATABASE SampleDBForSchemaPermissions
GO
DROP LOGIN TestLogin1
GO
こちらもご覧ください
型指定された XML と型指定されていない XML の比較
XML スキーマ コレクション (SQL Server)
サーバー上の XML スキーマ コレクションの要件と制限事項
DENY (オブジェクトの権限の拒否) (Transact-SQL)
GRANT (オブジェクトの権限の許可) (Transact-SQL)
XML データ (SQL Server)