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 형식 열을 제약하도록 권한을 부여합니다. 또한 다른 XML 스키마 컬렉션에서 이 스키마 컬렉션을 참조할 수 있는 권한을 취소합니다.
VIEW 정의 권한을 취소하면 보안 주체의 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