Поделиться через


Отмена разрешений для коллекции схем XML

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Разрешение на создание коллекции XML-схем можно отменить, выполнив одну из следующих операций:

  • Отменить разрешение ALTER для реляционной схемы. Затем субъект не может создать коллекцию XML-схем в реляционной схеме. Однако участник сможет создавать коллекции 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-схем.

  • Отмена разрешения VIEW DEFINITION лишает участника возможности просмотра содержимого коллекции XML-схем.

  • Отмена разрешения EXECUTE лишает участника возможности вставлять или обновлять значения в столбцах, переменных и параметрах, которые набраны или ограничены XML-коллекцией. Кроме того, отмена лишает права делать запрос столбцов, переменных или параметров типа xml .

Примеры

Представленные в следующих примерах сценарии отображают организацию разрешений на XML-схемы. В каждом примере создается соответствующая тестовая база данных, реляционные схемы и имена входа. Этим именам входа предоставляются необходимые разрешения на коллекции XML-схем. После завершения работы каждый пример выполняет необходимые действия по очистке.

А. Отмена разрешений на создание коллекции схем 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

См. также