Negar permissões em uma coleção de esquema XML
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
A permissão pode ser negada para criar uma nova coleção de esquema XML ou usar uma existente.
Negar permissão para criar uma coleção de esquema XML
Você pode negar permissão para criar uma coleção de esquema XML das seguintes maneiras:
Negar a permissão "ALTER" no esquema relacional.
Negar CONTROL no esquema relacional para negar todas as permissões no esquema relacional e em todos os objetos contidos.
Negar ALTER ANY SCHEMA no banco de dados. Nesse caso, o principal não pode criar uma coleção de esquema XML em nenhum lugar do banco de dados. Observe também que negar a permissão ALTER ou CONTROL no banco de dados nega todas as permissões em todos os objetos no banco de dados.
Negar permissões em um objeto de coleção de esquema XML
A seguir estão a permissão que pode ser negada em uma coleção de esquema XML existente e os resultados:
Negar a permissão ALTER nega ao principal a capacidade de modificar o conteúdo da coleção de esquema XML.
Negar a permissão CONTROL nega à entidade de segurança a possibilidade de realizar qualquer operação na coleção de esquema XML.
Negar a permissão REFERENCES impede que o principal possa especificar ou restringir colunas e parâmetros do tipo XML usando a coleção de esquema XML. Ele também nega ao principal a capacidade de fazer referência a essa coleção de esquema XML a partir de outras coleções de esquemas XML.
Negar a permissão VIEW DEFINITION retira ao elemento a capacidade de ver o conteúdo de uma coleção de esquemas XML.
Negar a permissão EXECUTE nega ao principal a capacidade de inserir ou atualizar os valores em colunas, variáveis e parâmetros digitados ou restringidos pela coleção de esquema XML. Ele também nega ao principal a capacidade de consultar os valores nessas mesmas colunas e variáveis do tipo xml.
Exemplos
Os cenários nos exemplos a seguir mostram como as permissões do esquema XML funcionam. Cada exemplo cria o banco de dados de teste, esquemas relacionais e logons necessários. Esses logons recebem as permissões necessárias de coleta de esquema XML. Cada exemplo realiza a limpeza necessária no final.
Um. Impedindo que um usuário crie uma coleção de esquema XML
Uma das maneiras de impedir que um usuário crie uma coleção de esquema XML é negando a permissão ALTER em um esquema relacional. Isso é mostrado no exemplo a seguir.
O exemplo cria um usuário, TestLogin1
e um banco de dados. Ele também cria um esquema relacional, além do esquema dbo
, no banco de dados. Inicialmente, a permissão CREATE XML SCHEMA
permite que o usuário crie uma coleção de esquema em qualquer lugar do banco de dados. O exemplo nega, em seguida, a permissão ALTER
ao utilizador num dos esquemas relacionais. Isso impede que o usuário crie uma coleção de esquema XML nesse esquema relacional.
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. Negando permissões em uma coleção de esquema XML
O exemplo a seguir mostra como uma permissão específica em uma coleção de esquema XML existente pode ser negada a um logon. Neste exemplo, um logon de teste tem a permissão REFERENCES negada em uma coleção de esquema XML existente.
O exemplo cria um usuário, TestLogin1
e um banco de dados. Ele também cria um esquema relacional, além do esquema dbo
, no banco de dados. Inicialmente, a permissão CREATE XML SCHEMA
permite que o usuário crie uma coleção de esquema em qualquer lugar do banco de dados.
A permissão REFERENCES
na coleção de esquema XML permite que TestLogin1
use o esquema na criação de uma coluna xml
digitada em uma tabela. Se a permissão REFERENCES
na coleção de esquema XML for negada, ela impedirá que o TestLogin1
use a coleção de esquema 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