Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
De machtiging kan worden geweigerd om een nieuwe XML-schemaverzameling te maken of een bestaande te gebruiken.
Machtiging weigeren om een XML-schemaverzameling te maken
U kunt de machtiging voor het maken van een XML-schemaverzameling op de volgende manieren weigeren:
Alter-machtiging weigeren voor het relationele schema.
Weiger CONTROL op het relationele schema om alle machtigingen voor het relationele schema en voor alle ingesloten objecten te ontzeggen.
ALTER ANY SCHEMA voor de database weigeren. In dit geval kan de principal nergens in de database een XML-schemaverzameling maken. Houd er ook rekening mee dat het weigeren van de machtiging ALTER of CONTROL voor de database alle machtigingen voor alle objecten in de database weigert.
Machtigingen weigeren voor een XML-schemaverzamelingsobject
Hieronder vindt u de machtiging die kan worden geweigerd voor een bestaande XML-schemaverzameling en de resultaten:
Als de ALTER-machtiging wordt ontzegd, wordt de principal de mogelijkheid ontzegd om de inhoud van de XML-schemaverzameling te wijzigen.
Het weigeren van de CONTROL-machtiging ontneemt de gebruiker het vermogen om enige bewerking uit te voeren van de XML-schemaverzameling.
Als de machtiging VERWIJZINGEN wordt ontzegd, wordt de principal de mogelijkheid ontnomen om kolommen en parameters van het XML-type te definiƫren of te beperken met behulp van de XML-schemaverzameling. Het weigert ook de principal de mogelijkheid om te verwijzen naar deze XML-schemaverzameling uit andere XML-schemaverzamelingen.
Door de machtiging VIEW DEFINITION te weigeren, ontzegt u de principal de mogelijkheid om de inhoud van een XML-schemaverzameling weer te geven.
Als u de EXECUTE-machtiging weigert, wordt de bevoegdheid voor de principal ontzegd om de waarden in kolommen, variabelen en parameters te inserteren of bij te werken die getypeerd of begrensd zijn door de XML-schemaverzameling. Het weigert ook de principal de mogelijkheid om query's uit te voeren op de waarden in dezelfde XML-typekolommen en -variabelen.
Voorbeelden
In de scenario's in de volgende voorbeelden ziet u hoe machtigingen voor XML-schema's werken. In elk voorbeeld worden de benodigde testdatabase, relationele schema's en aanmeldingen gemaakt. Aan deze aanmeldingen worden de benodigde machtigingen voor het verzamelen van XML-schema's verleend. Elk voorbeeld voert de benodigde opschoning aan het einde uit.
A. Voorkomen dat een gebruiker een XML-schemaverzameling maakt
Een van de manieren om te voorkomen dat een gebruiker een XML-schemaverzameling maakt, is door de machtiging ALTER voor een relationeel schema te weigeren. Dit wordt weergegeven in het volgende voorbeeld.
In het voorbeeld worden een gebruiker, TestLogin1
, en een database gemaakt. Er wordt ook een relationeel schema gemaakt, naast het dbo
schema, in de database. In eerste instantie kan de gebruiker met de machtiging CREATE XML SCHEMA
een schemaverzameling overal in de database maken. In het voorbeeld wordt vervolgens de machtiging voor gebruiker ALTER
geweigerd op een van de relationele schema's. Hiermee voorkomt u dat de gebruiker een XML-schemaverzameling maakt in dat relationele schema.
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. Machtigingen voor een XML-schemaverzameling weigeren
In het volgende voorbeeld ziet u hoe een specifieke machtiging voor een bestaande XML-schemaverzameling kan worden geweigerd voor een aanmelding. In dit voorbeeld wordt een testaanmelding de referentierechten geweigerd op een bestaande XML-schemaverzameling.
In het voorbeeld wordt een gebruiker, TestLogin1
, en een database gemaakt. Er wordt ook een relationeel schema gemaakt, naast het dbo
schema, in de database. In eerste instantie kan de gebruiker met de machtiging CREATE XML SCHEMA
een schemaverzameling overal in de database maken.
Met de machtiging REFERENCES
voor de XML-schemaverzameling kunt TestLogin1
het schema gebruiken om een getypte xml
kolom in een tabel te maken. Als de machtiging REFERENCES
voor de verzameling XML-schema's wordt geweigerd, voorkomt u dat de TestLogin1
de XML-schemaverzameling gebruikt.
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