Bagikan melalui


Mencabut izin pada kumpulan skema XML

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

Izin untuk membuat kumpulan skema XML dapat dicabut dengan menggunakan salah satu hal berikut ini:

  • Cabut izin ALTER untuk skema relasional. Kemudian, prinsipal tidak dapat membuat koleksi skema XML dalam skema relasional. Namun, prinsipal masih dapat melakukannya dalam skema relasional lain dalam database yang sama.

  • Cabut izin UBAH SKEMA APA PUN pada database untuk prinsipal. Kemudian, prinsipal tidak dapat membuat kumpulan skema XML di mana saja dalam database.

  • Cabut izin CREATE XML SCHEMA COLLECTION atau ALTER XML SCHEMA COLLECTION pada database untuk prinsipal. Ini mencegah prinsipal mengimpor kumpulan skema XML dalam database. Mencabut izin ALTER atau CONTROL pada database memiliki efek yang sama.

Mencabut izin pada objek kumpulan skema XML yang sudah ada

Berikut ini adalah izin yang dapat dicabut pada kumpulan skema XML dan hasilnya:

  • Mencabut izin ALTER mencabut kemampuan utama untuk memodifikasi konten koleksi skema XML.

  • Mencabut izin TAKE OWNERSHIP mencabut kemampuan prinsipal untuk mentransfer kepemilikan koleksi skema XML.

  • Mencabut izin REFERENCES mencabut kemampuan prinsipal untuk menggunakan koleksi skema XML untuk mengetik atau membatasi kolom jenis xml, dalam tabel dan tampilan, dan parameter. Ini juga mencabut izin untuk merujuk ke koleksi skema ini dari koleksi skema XML lainnya.

  • Mencabut izin DEFINISI TAMPILAN mencabut kemampuan prinsipal untuk melihat konten kumpulan skema XML.

  • Mencabut izin EXECUTE mencabut kemampuan prinsipal untuk menyisipkan atau memperbarui nilai dalam kolom, variabel, dan parameter yang diketik atau dibatasi oleh koleksi XML. Ini juga mencabut kemampuan untuk mengkueri kolom, variabel, atau parameter jenis xml tersebut.

Contoh

Skenario dalam contoh berikut menggambarkan cara kerja izin skema XML. Setiap contoh membuat database pengujian, skema relasional, dan login yang diperlukan. Login ini diberikan izin pengumpulan skema XML yang diperlukan. Setiap contoh melakukan pembersihan yang diperlukan di akhir.

J. Mencabut izin untuk membuat kumpulan skema XML

Contoh ini membuat login dan database sampel. Ini juga menambahkan skema relasional dalam database. Awalnya, login diberikan izin ALTER pada skema relasional dan izin lain yang diperlukan untuk membuat koleksi skema XML. Contoh kemudian mencabut izin ALTER pada salah satu skema relasional dalam database. Ini mencegah masuk membuat koleksi skema 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

Lihat juga