Запрет разрешений для коллекции схем XML
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Можно запретить разрешение либо на создание новой коллекции 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-схемы. В каждом примере создается соответствующая тестовая база данных, реляционные схемы и имена входа. Этим именам входа предоставляются необходимые разрешения на коллекции XML-схем. После завершения работы каждый пример выполняет необходимые действия по очистке.
А. Запрет пользователю создавать коллекции схем 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-схем. В этом примере запрещается разрешение REFERENCES для тестового имени входа на существующую коллекцию XML-схем.
В данном примере создается пользователь TestLogin1
и база данных. Кроме того, в дополнение к схеме dbo
в базе данных создается реляционная схема. Поначалу разрешение CREATE XML SCHEMA
позволяет пользователю создавать коллекцию схем в любом месте базы данных.
Разрешение REFERENCES
на коллекцию XML-схем позволяет учетной записи TestLogin1
использовать схему при создании типизированного столбца xml
в таблице. Если разрешение REFERENCES
коллекции XML-схем запрещено, то пользователь TestLogin1
не может использовать ее.
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