Dela via


Neka behörigheter för en XML-schemasamling

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Behörighet kan nekas att antingen skapa en ny XML-schemasamling eller använda en befintlig.

Neka behörighet att skapa en XML-schemasamling

Du kan neka behörighet att skapa en XML-schemasamling på följande sätt:

  • Neka ALTER-behörighet för relationsschemat.

  • Neka KONTROLL på relationsschemat för att neka alla behörigheter för relationsschemat och för alla inneslutna objekt.

  • Neka ALTER ANY SCHEMA på databasen. I det här fallet kan huvudansvarig inte skapa en XML-schema-samling någonstans i databasen. Observera också att nekande av ALTER- eller CONTROL-behörighet för databasen nekar alla behörigheter för alla objekt i databasen.

Neka behörigheter för ett XML-schemasamlingsobjekt

Följande är behörigheten som kan nekas för en befintlig XML-schemasamling och resultaten:

  • Att neka ALTER-behörigheten nekar huvudpersonen möjligheten att ändra innehållet i XML-schemasamlingen.

  • Att neka behörigheten CONTROL nekas huvudprincipalen möjligheten att utföra alla åtgärder på XML-schemasamlingen.

  • Om du nekar behörigheten REFERENSER nekas huvudkontot möjligheten att skriva eller begränsa xml-typkolumner och -parametrar med hjälp av XML-schemasamlingen. Det hindrar också huvudmannen möjligheten att referera till denna XML-schemasamling från andra XML-schemasamlingar.

  • Att neka behörigheten VIEW DEFINITION förvägrar huvudprincipalen möjligheten att se innehållet i en XML-schemasamling.

  • Att neka behörigheten EXECUTE nekas huvudprincipalen möjligheten att infoga eller uppdatera värdena i kolumner, variabler och parametrar som är typade eller begränsade av XML-schemasamlingen. Det nekar också huvudman möjligheten att ställa frågor mot värdena i samma xml-typkolumner och variabler.

Exempel

Scenarierna i följande exempel visar hur XML-schemabehörigheter fungerar. Varje exempel skapar den nödvändiga testdatabasen, relationsscheman och inloggningar. Dessa inloggningar beviljas nödvändiga XML-schemainsamlingsbehörigheter. Varje exempel gör den nödvändiga rensningen i slutet.

A. Förhindra att en användare skapar en XML-schemasamling

Ett sätt att förhindra en användare från att skapa en XML-schemasamling är genom att neka ALTER-behörigheten för ett relationsschema. Detta visas i följande exempel.

Exemplet skapar en användare, TestLogin1och en databas. Det skapar också ett relationsschema, förutom dbo-schemat, i databasen. Från början gör CREATE XML SCHEMA behörighet att användaren kan skapa en schemasamling var som helst i databasen. Exemplet nekar sedan ALTER behörighet till användaren i något av relationsschemana. Detta hindrar användaren från att skapa en XML-schemasamling i det relationsschemat.

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. Neka behörigheter för en XML-schemasamling

I följande exempel visas hur en specifik behörighet för en befintlig XML-schemasamling kan nekas till en inloggning. I det här exemplet nekas en testinloggning REFERENS-behörigheten för en befintlig XML-schemasamling.

Exemplet skapar en användare, TestLogin1och en databas. Det skapar också ett relationsschema, förutom dbo-schemat, i databasen. Från början gör CREATE XML SCHEMA behörighet att användaren kan skapa en schemasamling var som helst i databasen.

Med REFERENCES behörighet för XML-schemasamlingen kan TestLogin1 använda schemat när du skapar en skriven xml kolumn i en tabell. Om behörigheten REFERENCES för XML-schemasamlingen nekas, hindrar det TestLogin1 från att använda XML-schemasamlingen.

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

Se även