다음을 통해 공유


XML 스키마 컬렉션에 대한 권한 거부

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance

새 XML 스키마 컬렉션을 만들거나 기존 스키마 컬렉션을 사용할 권한이 거부될 수 있습니다.

XML 스키마 컬렉션을 만들 권한 거부

다음과 같은 방법으로 XML 스키마 컬렉션을 만드는 권한을 거부할 수 있습니다.

  • 관계형 스키마에 대한 ALTER 권한을 거부합니다.

  • 관계형 스키마에 대한 CONTROL을 거부하여 관계형 스키마 및 포함된 모든 개체에 대한 모든 권한을 거부합니다.

  • 데이터베이스에서 ALTER ANY 스키마를 거부합니다. 이 경우 보안 주체는 데이터베이스의 어느 곳에서도 XML 스키마 컬렉션을 만들 수 없습니다. 또한 데이터베이스에 대한 ALTER 또는 CONTROL 권한을 거부하면 데이터베이스의 모든 개체에 대한 모든 권한이 거부됩니다.

XML 스키마 컬렉션에 대한 권한 거부

다음은 기존 XML 스키마 컬렉션 및 결과에 대해 거부할 수 있는 권한입니다.

  • ALTER 권한을 거부하면 XML 스키마 컬렉션의 콘텐츠를 수정할 수 있는 보안 주체의 권한이 거부됩니다.

  • CONTROL 권한을 거부하면 XML 스키마 컬렉션에 대한 작업을 수행하는 보안 주체의 권한이 거부됩니다.

  • REFERENCES 권한을 거부하면 보안 주체가 XML 스키마 컬렉션을 사용하여 xml 형식 열과 매개 변수를 형식화하거나 제약할 수 없습니다. 또한 다른 XML 스키마 컬렉션에서 이 XML 스키마 컬렉션을 참조하는 보안 주체의 기능을 거부합니다.

  • VIEW DEFINITION 권한을 거부하면 XML 스키마 컬렉션의 콘텐츠를 볼 수 있는 보안 주체의 권한이 거부됩니다.

  • EXECUTE 권한을 거부하면 보안 주체가 XML 스키마 컬렉션에 의해 형식화 또는 제약된 열, 변수 및 매개 변수의 값을 삽입하거나 업데이트할 수 없습니다. 또한 동일한 xml 형식 열 및 변수의 값을 쿼리하는 보안 주체의 기능도 거부합니다.

예제

다음 예제의 시나리오에서는 XML 스키마 권한의 작동 방식을 보여 줍니다. 각 예제에서는 필요한 테스트 데이터베이스, 관계형 스키마 및 로그인을 만듭니다. 이러한 로그인에는 필요한 XML 스키마 컬렉션 권한이 부여됩니다. 각 예제는 마지막에 필요한 정리를 수행합니다.

A. 사용자가 XML 스키마 컬렉션을 만들지 못하도록 방지

사용자가 XML 스키마 컬렉션을 만들지 못하게 하는 방법 중 하나는 관계형 스키마에 대한 ALTER 권한을 거부하는 것입니다. 이 방법은 다음 예제에서 확인할 수 있습니다.

이 예제에서는 TestLogin1 사용자 및 데이터베이스를 만듭니다. 또한 데이터베이스에 스키마 외에도 dbo 관계형 스키마를 만듭니다. 처음에는 CREATE XML SCHEMA 사용 권한을 통해 사용자가 데이터베이스의 아무 곳이나 스키마 컬렉션을 만들 수 있습니다. 그런 다음, 관계형 스키마 중 하나에 대한 사용자에 대한 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="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
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="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

B. XML 스키마 컬렉션에 대한 권한 거부

다음 예에서는 로그인에 대해 기존 XML 스키마 컬렉션에 대한 특정 권한을 거부할 수 있는 방법을 보여 줍니다. 이 예제에서 테스트 로그인은 기존 XML 스키마 컬렉션에 대한 REFERENCES 권한이 거부됩니다.

이 예제에서는 TestLogin1 사용자 및 데이터베이스를 만듭니다. 또한 데이터베이스에 스키마 외에도 dbo 관계형 스키마를 만듭니다. 처음에는 CREATE XML SCHEMA 사용 권한을 통해 사용자가 데이터베이스의 아무 곳이나 스키마 컬렉션을 만들 수 있습니다.

REFERENCES XML 스키마 컬렉션에 대한 사용 권한을 통해 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="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
-- 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

참고 항목