XML 스키마 컬렉션에 대한 사용 권한 거부
적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
새 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 스키마 컬렉션 권한이 부여됩니다. 각 예제는 마지막에 필요한 정리를 수행합니다.
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 스키마 컬렉션에 대한 사용 권한을 통해 스키마를 사용하여 테이블에 형식화된 xml
열을 만들 수 TestLogin1
있습니다. 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
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기