Udostępnij za pośrednictwem


Odmowa uprawnień do kolekcji schematów XML

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Można odmówić uprawnień, aby utworzyć nową kolekcję schematów XML lub użyć istniejącej.

Odmowa uprawnień do tworzenia kolekcji schematów XML

Uprawnienia do tworzenia kolekcji schematów XML można odmówić w następujący sposób:

  • Odmów uprawnienia ALTER w schemacie relacyjnym.

  • Odmów kontroli nad schematem relacyjnym, aby odmówić wszystkich uprawnień do schematu relacyjnego i wszystkich zawartych obiektów.

  • Odmów ALTER ANY SCHEMA w bazie danych. W tym przypadku główny użytkownik nie może utworzyć kolekcji schematów XML w żadnym miejscu w bazie danych. Należy również pamiętać, że odmowa uprawnień ALTER lub CONTROL w bazie danych odmawia wszystkich uprawnień do wszystkich obiektów w bazie danych.

Odmowa uprawnień do obiektu kolekcji schematów XML

Poniżej przedstawiono uprawnienia, które można odmówić w istniejącej kolekcji schematów XML i wynikach:

  • Odmowa uprawnienia ALTER uniemożliwia podmiotowi zabezpieczeń możliwość modyfikowania zawartości kolekcji schematów XML.

  • Odmowa uprawnienia CONTROL uniemożliwia użytkownikowi wykonywanie dowolnej operacji w kolekcji schematów XML.

  • Odmowa uprawnień REFERENCES uniemożliwia użytkownikowi wprowadzanie lub ograniczanie kolumn i parametrów typu XML przy użyciu kolekcji schematów XML. Odbiera również podmiotowi głównemu możliwość odwoływania się do tej kolekcji schematów XML z innych kolekcji schematów XML.

  • Odmowa uprawnienia VIEW DEFINITION odmawia użytkownikowi możliwości wyświetlania zawartości kolekcji schematów XML.

  • Odmowa uprawnień EXECUTE uniemożliwia użytkownikowi wstawianie lub aktualizowanie wartości w kolumnach, zmiennych i parametrach, które są określone lub ograniczone przez kolekcję schematów XML. Odmówiono również dyrektorowi możliwości wykonywania zapytań o wartości w tych samych kolumnach i zmiennych typu xml.

Przykłady

W poniższych przykładach pokazano, jak działają uprawnienia schematu XML. W każdym przykładzie tworzona jest niezbędna testowa baza danych, schematy relacyjne i identyfikatory logowania. Te identyfikatory logowania otrzymują niezbędne uprawnienia do zbierania schematów XML. Każdy przykład wykonuje niezbędne czyszczenie na końcu.

A. Uniemożliwianie użytkownikowi tworzenia kolekcji schematów XML

Jednym ze sposobów zapobiegania tworzeniu kolekcji schematów XML przez użytkownika jest odmowa uprawnienia ALTER w schemacie relacyjnym. Jest to pokazane w poniższym przykładzie.

W przykładzie tworzony jest użytkownik, TestLogin1i baza danych. Tworzy również schemat relacyjny oprócz schematu dbo w bazie danych. Początkowo uprawnienie CREATE XML SCHEMA umożliwia użytkownikowi utworzenie kolekcji schematów w dowolnym miejscu w bazie danych. W tym przykładzie użytkownikowi odmówiono uprawnień ALTER do jednego ze schematów relacyjnych. Uniemożliwia to użytkownikowi utworzenie kolekcji schematów XML w tym schemacie relacyjnym.

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. Odmowa uprawnień do kolekcji schematów XML

W poniższym przykładzie pokazano, jak można odmówić dostępu do określonego uprawnienia na istniejącej kolekcji schematów XML. W tym przykładzie testowe logowanie odmówiono uprawnienia REFERENCES w istniejącej kolekcji schematów XML.

W przykładzie tworzony jest użytkownik, TestLogin1i baza danych. Tworzy również schemat relacyjny oprócz schematu dbo w bazie danych. Początkowo uprawnienie CREATE XML SCHEMA umożliwia użytkownikowi utworzenie kolekcji schematów w dowolnym miejscu w bazie danych.

Uprawnienie REFERENCES w kolekcji schematów XML umożliwia TestLogin1 zastosowanie schematu do tworzenia kolumny typu xml w tabeli. Jeśli uprawnienia REFERENCES do kolekcji schematów XML zostaną odmówione, uniemożliwi to TestLogin1 korzystanie z tej kolekcji schematów 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

Zobacz też