Menolak izin pada kumpulan skema XML
Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance
Izin dapat ditolak untuk membuat koleksi skema XML baru atau menggunakan yang sudah ada.
Menolak izin untuk membuat kumpulan skema XML
Anda dapat menolak izin untuk membuat kumpulan skema XML dengan cara berikut:
Tolak izin UBAH pada skema relasional.
Tolak CONTROL pada skema relasional untuk menolak semua izin pada skema relasional dan pada semua objek yang terkandung.
Tolak UBAH SKEMA APA PUN pada database. Dalam hal ini, prinsipal tidak dapat membuat kumpulan skema XML di mana pun dalam database. Perhatikan juga bahwa menolak izin ALTER atau CONTROL pada database menolak semua izin pada semua objek dalam database.
Menolak izin pada objek kumpulan skema XML
Berikut ini adalah izin yang dapat ditolak pada kumpulan skema XML yang ada dan hasilnya:
Menolak izin ALTER menolak kemampuan utama untuk memodifikasi konten kumpulan skema XML.
Menolak izin CONTROL menolak kemampuan utama untuk melakukan operasi apa pun pada kumpulan skema XML.
Menolak izin REFERENSI menolak kemampuan utama untuk mengetik atau membatasi kolom dan parameter jenis xml menggunakan kumpulan skema XML. Ini juga menolak kemampuan utama untuk merujuk ke koleksi skema XML ini dari koleksi skema XML lainnya.
Menolak izin LIHAT DEFINISI menolak kemampuan utama untuk melihat konten kumpulan skema XML.
Menolak izin EXECUTE menolak kemampuan utama untuk menyisipkan atau memperbarui nilai dalam kolom, variabel, dan parameter yang diketik atau dibatasi oleh koleksi skema XML. Ini juga menolak kemampuan utama untuk mengkueri nilai dalam kolom dan variabel jenis xml yang sama.
Contoh
Skenario dalam contoh berikut menunjukkan 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. Mencegah pengguna membuat kumpulan skema XML
Salah satu cara untuk mencegah pengguna membuat koleksi skema XML adalah dengan menolak izin ALTER pada skema relasional. Hal ini ditunjukkan di contoh berikut.
Contoh membuat pengguna, TestLogin1
, dan database. Ini juga membuat skema relasional, selain dbo
skema, dalam database. Awalnya, CREATE XML SCHEMA
izin memungkinkan pengguna untuk membuat kumpulan skema di mana saja dalam database. Contoh kemudian menolak ALTER
izin kepada pengguna pada salah satu skema relasional. Ini mencegah pengguna membuat koleksi skema XML dalam skema relasional tersebut.
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. Menolak izin pada kumpulan skema XML
Contoh berikut menunjukkan bagaimana izin tertentu pada kumpulan skema XML yang ada dapat ditolak untuk masuk. Dalam contoh ini, login pengujian ditolak izin REFERENCES pada kumpulan skema XML yang ada.
Contoh membuat pengguna, TestLogin1
, dan database. Ini juga membuat skema relasional, selain dbo
skema, dalam database. Awalnya, CREATE XML SCHEMA
izin memungkinkan pengguna untuk membuat kumpulan skema di mana saja dalam database.
Izin REFERENCES
pada kumpulan skema XML memungkinkan TestLogin1
penggunaan skema dalam membuat kolom yang diketik xml
dalam tabel. REFERENCES
Jika izin pada koleksi skema XML ditolak, itu mencegah TestLogin1
penggunaan koleksi skema 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