Aracılığıyla paylaş


Bir XML şeması derlemesi izin verme

Bir XML şema koleksiyon oluştur ve XML şema koleksiyon nesne üzerindeki izinleri de izin verebilirsiniz.

Bir XML şeması oluşturmak için izin verme koleksiyon

Bir XML şema koleksiyon oluşturmak için aşağıdaki izinleri olması gerekir:

  • Patron, veritabanı düzeyinde CREATE XML SCHEMA koleksiyon izni gerektirir.

  • XML şema koleksiyonları ilişkisel olduğundan şema kapsamlı anapara de ALTER ilişkisel şemasını temel izniniz olmalıdır.

Aşağıdaki izinlerden bir ilişkisel bir veritabanındaki bir sunucuda şemada bir XML şema koleksiyon oluştur bir sorumlusu sağlar:

  • Sunucu DENETIM izni

  • Sunucuda HERHANGI bir DATABASE iznine ALTER

  • ALTER veritabanı izni

  • Veritabanındaki DENETIM izni

  • ALTER ANY SCHEMA iznine ve veritabanındaki CREATE XML SCHEMA koleksiyon izni

  • Ilişkisel bir şemayı ve XML SCHEMA koleksiyon CREATE izin veritabanındaki ALTER veya DENETIM izni

Aşağıdaki örnekte, bu son yöntem izinleri kullanılır.

Ilişkisel şema sahibi bu şemada oluşturulan XML şema koleksiyon sahibi olur.Bu sahibi, sonra XML şema koleksiyon üzerinde tam denetime sahiptir.Bu nedenle, bu sahibine yazabilir XML şema koleksiyon değiştirmek, bir xml sütun veya XML şema koleksiyon bırakın.

XML şema koleksiyon nesnelerde izin verme

Aşağıdaki izinlerden XML şema koleksiyon üzerinde izin verilir:

  • ALTER iznine XML SCHEMA koleksiyon ALTER deyimini kullanarak, varolan bir XML şema koleksiyon içeriğini değiştirme gereklidir.

  • DENETIM izni XML şema koleksiyon herhangi bir işlem gerçekleştirmek için bir kullanıcı izin verir.

  • Bir asıl XML şema koleksiyon sahipliğini aktarmak için ALıN SAHIPLIK izni gereklidir.

  • BAŞVURULAR izni anapara yazın veya sınırlamak için XML şema koleksiyon kullanmak üzere yetkilendirir. xml sütunlar, tablolar ve görünümler ve parametreleri yazın. Bir XML şema koleksiyon diğerine başvuruyor BAşVURULAR izin de gereklidir.

  • Görünüm TANıMıNA izin anapara XML_SCHEMA_NAMESPACE veya aracılığıyla bu güvenlik sorumlusunun sağlanan katalog görünümleri bir XML şema koleksiyon içeriğini de üzerinde koleksiyon ALTER, BAşVURULAR ya da DENETIM izinlerinden biri olan bir sorguya izin verir.

  • yürütmek izni yazarak sınırlama veya XML şema koleksiyon karşı sorumlusu tarafından güncelleştirildi veya araya değerlerini doğrulamak için gereken xml sütunlar, değişkenler ve parametreleri yazın. Bu sütunları ve değişkenleri depolanan XML sorgularken bu izni gerekir.

Örnekler

Aşağıdaki örnekler senaryolarda, XML şeması izinlerin nasıl çalıştığını gösterir.Gerekli bir sınama veritabanına, ilişkisel şemalar ve oturum açma, her örnek oluşturur.Bu oturumlar gerekli bir XML şema koleksiyon izinleri verilir.Her örnek gerekli sonunda mu temizleme.

C.Bir XML şema koleksiyon oluşturmaya izin verme

Aşağıdaki örnek, bir güvenlik sorumlusu bir XML şema koleksiyon oluşturabilmeleri nasıl izin verilen gösterir.The example creates a sample database and a test user, TestLogin1.TestLogin1 is then given ALTER permission on the relational schema and given CREATE XML SCHEMA COLLECTION permission on the database.Bu izinlere sahip TestLogin1 örnek XML şema koleksiyon oluşturmada başarılı olur.

SETUSER
GO
USE master
GO
CREATE LOGIN TestLogin1 WITH password='SQLSvrPwd1'
GO
CREATE DATABASE SampleDBForSchemaPermissions
GO
USE SampleDBForSchemaPermissions
GO
CREATE USER TestLogin1
GO
-- User needs ALTER permission on the relational schema in the database.
GRANT ALTER ON SCHEMA::dbo TO TestLogin1
GO
-- User also needs permission to create xml schema collections in the database.
GRANT CREATE XML SCHEMA COLLECTION 
TO TestLogin1
GO
-- Now execute create xml schema  collection.
SETUSER 'TestLogin1'
GO
CREATE XML SCHEMA COLLECTION myTestSchemaCollection AS '<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema targetNamespace="http://schemas.adventure-works.com/Additional/ContactInfo" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
elementFormDefault="qualified">
<xsd:element name="AdditionalContactInfo" >
  <xsd:complexType mixed="true" >
    <xsd:sequence>
      <xsd:any processContents="strict"  
               namespace="http://schemas.adventure-works.com/Contact/Record 
                          http://schemas.adventure-works.com/AdditionalContactTypes"
               minOccurs="0" maxOccurs="unbounded" />
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>
<xsd:element name="root" type="xsd:byte"/>
</xsd:schema>'
GO
-- final cleanup
SETUSER
GO
USE master
GO
DROP DATABASE SampleDBForSchemaPermissions
GO
DROP LOGIN TestLogin1
GO

b.Varolan bir XML şema koleksiyon kullanma izni verme

XML şeması ait iznine model daha aşağıdaki örnekte gösterilmiştir koleksiyon.Bunu nasıl farklı izinlere örnekler XML şema koleksiyon oluşturmak için gereklidir.

The example creates a test database and a login, TestLogin1.TestLogin1 creates an XML schema collection in the database.Oturum açma bir tablo oluşturur ve XML şema koleksiyon yazılı xml bir sütun oluşturmak için kullanır.Kullanıcı veri ekler ve bunu sorgular.Bu adımları, kodda gösterildiği gibi gerekli şema izinleri gerektirir.

SETUSER
GO
USE master
GO
CREATE LOGIN TestLogin1 WITH password='SQLSvrPwd1'
GO
CREATE DATABASE SampleDBForSchemaPermissions
GO
USE SampleDBForSchemaPermissions
GO
CREATE USER TestLogin1
GO
-- Grant permission to the user.
SETUSER
GO
-- User needs ALTER permission on the relational schema in the database.
GRANT ALTER ON SCHEMA::dbo TO TestLogin1
GO
-- User also needs permission to create xml schema collections in the database.
GRANT CREATE XML SCHEMA COLLECTION 
TO TestLogin1
GO
-- Now user can execute previous CREATE XML SCHEMA COLLECTION.
SETUSER 'TestLogin1'
GO
CREATE XML SCHEMA COLLECTION myTestSchemaCollection AS '<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema targetNamespace="http://schemas.adventure-works.com/Additional/ContactInfo" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
elementFormDefault="qualified">

<xsd:element name="AdditionalContactInfo" >
  <xsd:complexType mixed="true" >
    <xsd:sequence>
      <xsd:any processContents="strict"  
               namespace="http://schemas.adventure-works.com/Contact/Record 
                          http://schemas.adventure-works.com/AdditionalContactTypes"
               minOccurs="0" maxOccurs="unbounded" />
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>
<xsd:element name="telephone" type="xsd:string" />
</xsd:schema>'
GO

-- Create a table using the collection to type an xml column. 
--TestLogin1 needs permission to create table.
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 schema 
-- collection not needed).
GRANT REFERENCES ON XML SCHEMA COLLECTION::myTestSchemaCollection 
TO TestLogin1
GO
-- Now user can create table and use the XML schema collection to create 
-- a typed XML column.
SETUSER 'TestLogin1'
GO
CREATE TABLE MyTestTable (xmlCol xml (dbo.myTestSchemaCollection))
GO
-- To insert data in the table, user needs EXECUTE permission on the XML schema collection
-- GRANT EXECUTE permission to TestLogin2 on the xml schema collection
SETUSER
GO
GRANT EXECUTE ON XML SCHEMA COLLECTION::myTestSchemaCollection 
TO TestLogin1
GO
-- TestLogin1 does not own the dbo schema. This user needs INSERT permission.
GRANT INSERT TO TestLogin1
GO
-- Now user can insert data in the table.
SETUSER 'TestLogin1'
GO
INSERT INTO MyTestTable VALUES('
<telephone xmlns="http://schemas.adventure-works.com/Additional/ContactInfo">111-1111</telephone>
')
GO
-- To query the table, TestLogin1 needs permissions (SELECT on the table and EXECUTE on the XML schema collection).
SETUSER
GO
GRANT SELECT TO TestLogin1
GO
-- TestLogin1 already has EXECUTE permission on the schema (granted before inserting a record in the table).
SELECT xmlCol.query('declare default namespace="http://schemas.adventure-works.com/Additional/ContactInfo" /telephone[1]')
FROM MyTestTable
GO
-- To illustrate the user needs EXECUTE permission to query, let us REVOKE
-- previously granted permission and return the query.
SETUSER
GO
REVOKE EXECUTE ON XML SCHEMA COLLECTION::myTestSchemaCollection to TestLogin1
Go
-- Now TestLogin1 cannot execute the query.
SETUSER 'TestLogin1'
GO
SELECT xmlCol.query('declare default namespace="http://schemas.adventure-works.com/Additional/ContactInfo" /telephone[1]')
FROM MyTestTable
GO
-- Final cleanup 
SETUSER
GO
USE master
GO
DROP DATABASE SampleDBForSchemaPermissions
GO
DROP LOGIN TestLogin1
GO

c.Bir XML şema koleksiyon ALTER izni verme

Bir kullanıcı, varolan bir XML şema koleksiyon veritabanındaki değiştirme izni ALTER.Aşağıdaki örnek, nasıl ALTER izni verildiğini gösterir.

SETUSER
GO
USE master
GO
CREATE LOGIN TestLogin1 WITH password='SQLSvrPwd1'
GO
CREATE DATABASE SampleDBForSchemaPermissions
GO
USE SampleDBForSchemaPermissions
GO
CREATE USER TestLogin1
GO
-- Grant permission to the user.
SETUSER
GO
-- User needs ALTER permission on the relational schema in the database.
GRANT ALTER ON SCHEMA::dbo TO TestLogin1
GO
-- User also needs permission to create XML schema collections in the database.
GRANT CREATE XML SCHEMA COLLECTION 
TO TestLogin1
GO
-- Now user can execute previous CREATE XML SCHEMA COLLECTION.
SETUSER 'TestLogin1'
GO
CREATE XML SCHEMA COLLECTION myTestSchemaCollection AS '<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema targetNamespace="http://schemas.adventure-works.com/Additional/ContactInfo" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
elementFormDefault="qualified">

<xsd:element name="AdditionalContactInfo" >
  <xsd:complexType mixed="true" >
    <xsd:sequence>
      <xsd:any processContents="strict"  
               namespace="http://schemas.adventure-works.com/Contact/Record 
                          http://schemas.adventure-works.com/AdditionalContactTypes"
               minOccurs="0" maxOccurs="unbounded" />
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>
<xsd:element name="telephone" type="xsd:string" />
</xsd:schema>'
GO
-- Now grant ALTER permission to TestLogin1.
SETUSER
GO
GRANT ALTER ON XML SCHEMA COLLECTION::myTestSchemaCollection TO TestLogin1
GO
-- Now TestLogin1 should be able to add components to the collection.
SETUSER 'TestLogin1'
GO
ALTER XML SCHEMA COLLECTION myTestSchemaCollection ADD '
<xsd:schema targetNamespace="http://schemas.adventure-works.com/Additional/ContactInfo" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns="http://schemas.adventure-works.com/Additional/ContactInfo" 
elementFormDefault="qualified">
 <xsd:element name="pager" type="xsd:string"/>
</xsd:schema>
'
Go
-- Final cleanup 
SETUSER
GO
USE master
GO
DROP DATABASE SampleDBForSchemaPermissions
GO
DROP LOGIN TestLogin1
GO

d.Bir XML şema koleksiyon ALıN SAHIPLIK izni verme

Aşağıdaki örnek, nasıl XML şema sahipliği bir kullanıcıdan diğerine transfer edilebilir gösterir.Örnek daha ilginç hale getirmek için , kullanıcıların bu örnekte, farklı bir varsayılan ilişkisel şemalarda çalışır.

Bu örnek, aşağıdakileri yapar:

  • Bir veritabanını iki ilişkisel şemalarla oluşturur. dbo ve myOtherDBSchema.

  • Creates two users, TestLogin1 and TestLogin2.TestLogin2 is made the owner of the myOtherDBSchema relational schema.

  • TestLogin1 bir XML Şeması'nı oluşturur koleksiyon, dbo ilişkisel bir şema.

  • TestLogin1 sonra sağlar. TAKE OWNERSHIP XML şema derlemesine izni TestLogin2.

  • TestLogin2 XML şema koleksiyon sahibi olur. myOtherDBSchema, XML şema derlemesinin ilişkisel şemayı değiştirmeden.

CREATE LOGIN TestLogin1 with password='SQLSvrPwd1'
GO
CREATE LOGIN TestLogin2 with password='SQLSvrPwd2'
GO
CREATE DATABASE SampleDBForSchemaPermissions
GO
USE SampleDBForSchemaPermissions
GO
-- Create another relational schema in the database.
CREATE SCHEMA myOtherDBSchema
GO
-- Create users in the database. Note TestLogin2's default schema is
-- myOtherDBSchema.
CREATE USER TestLogin1
GO
CREATE USER TestLogin2 WITH DEFAULT_SCHEMA=myOtherDBSchema
GO
-- TestLogin2 will own myOtherDBSchema relational schema.
ALTER AUTHORIZATION ON SCHEMA::myOtherDBSchema TO TestLogin2
GO

-- For TestLogin1 to create XML schema collection, following
-- permission needed.
GRANT CREATE XML SCHEMA COLLECTION 
TO TestLogin1
GO
GRANT ALTER ON SCHEMA::dbo TO TestLogin1
GO
-- Now TestLogin1 can create an XML schema collection.
SETUSER 'TestLogin1'
GO
CREATE XML SCHEMA COLLECTION myTestSchemaCollection AS '<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema targetNamespace="http://schemas.adventure-works.com/Additional/ContactInfo" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
elementFormDefault="qualified">

<xsd:element name="AdditionalContactInfo" >
 <xsd:complexType mixed="true" >
    <xsd:sequence>
      <xsd:any processContents="strict" 
               namespace="http://schemas.adventure-works.com/Contact/Record 
                          http://schemas.adventure-works.com/AdditionalContactTypes"
               minOccurs="0" maxOccurs="unbounded" />
    </xsd:sequence>
 </xsd:complexType>
</xsd:element>
<xsd:element name="telephone" type="xsd:string" />
</xsd:schema>'
GO

-- Grant TAKE OWNERSHIP to TestLogin2.
SETUSER
GO
GRANT TAKE OWNERSHIP ON XML SCHEMA COLLECTION::dbo.myTestSchemaCollection 
TO TestLogin2
GO
-- verify the owner. Note the UserName and Principal_id is null. 
SELECT user_name(sys.xml_schema_collections.principal_id) as UserName, 
       sys.schemas.name as RelSchemaName,* 
FROM   sys.xml_schema_collections 
      JOIN sys.schemas 
      ON sys.schemas.schema_id=sys.xml_schema_collections.schema_id
GO
-- TestLogin2 can take ownership now.
SETUSER 'TestLogin2'
GO
ALTER AUTHORIZATION ON XML SCHEMA COLLECTION::dbo.myTestSchemaCollection 
TO TestLogin2
GO
-- Note that although TestLogin2 is the owner, the XML schema collection 
-- is still in dbo.
SELECT user_name(sys.xml_schema_collections.principal_id) as UserName, 
      sys.schemas.name as RelSchemaName,* 
FROM sys.xml_schema_collections JOIN sys.schemas 
     ON sys.schemas.schema_id=sys.xml_schema_collections.schema_id
GO

-- TestLogin2 moves the collection from dbo to myOtherDBSchema relational schema.
-- TestLogin2 already has all necessary permissions.
-- 1) TestLogin2 owns the destination relational schema so he can ALTER it.
-- 2) TestLogin2 owns the XML schema collection (thus has CONTROL permission).
ALTER SCHEMA myOtherDBSchema
TRANSFER XML SCHEMA COLLECTION::dbo.myTestSchemaCollection
GO

SELECT user_name(sys.xml_schema_collections.principal_id) as UserName, 
       sys.schemas.name as RelSchemaName,* 
FROM   sys.xml_schema_collections JOIN sys.schemas 
       ON sys.schemas.schema_id=sys.xml_schema_collections.schema_id
GO
-- Final cleanup 
SETUSER
GO
USE master
GO
DROP DATABASE SampleDBForSchemaPermissions
GO
DROP LOGIN TestLogin1
DROP LOGIN TestLogin2
GO 

e.Görünüm TANıMıNı bir XML şema koleksiyon izni verme

Bu örnek, nasıl GÖRÜNÜM TANıMıNı bir XML şema koleksiyon için izni gösterilmektedir:

SETUSER
GO
USE master
GO
if exists( select * from sysdatabases where name='permissionsDB' )
   drop database permissionsDB
GO
if exists( select * from sys.sql_logins where name='schemaUser' )
   drop login schemaUser
GO
CREATE DATABASE permissionsDB
GO
CREATE LOGIN schemaUser WITH PASSWORD='Pass#123',DEFAULT_DATABASE=permissionsDB
GO
GRANT CONNECT SQL TO schemaUser
GO
USE permissionsDB
GO
CREATE USER schemaUser WITH DEFAULT_SCHEMA=dbo
GO
CREATE XML SCHEMA COLLECTION MySC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns"
xmlns:ns="http://ns">

   <simpleType name="ListOfIntegers">
      <list itemType="integer"/>
   </simpleType>

   <element name="root" type="ns:ListOfIntegers"/>

   <element name="gRoot" type="gMonth"/>

</schema>
'
GO
-- schemaUser cannot see the contents of the collection.
SETUSER 'schemaUser'
GO
SELECT XML_SCHEMA_NAMESPACE(N'dbo',N'MySC')
GO

-- Grant schemaUser VIEW DEFINITION and REFERENCES permissions
-- on the xml schema collection.
SETUSER
GO
GRANT VIEW DEFINITION ON XML SCHEMA COLLECTION::dbo.MySC TO schemaUser
GO
GRANT REFERENCES ON XML SCHEMA COLLECTION::dbo.MySC TO schemaUser
GO
-- Now schemaUser can see the content of the collection.
SETUSER 'schemaUser'
GO
SELECT XML_SCHEMA_NAMESPACE(N'dbo',N'MySC')
GO
-- Revoke schemaUser VIEW DEFINITION permissions
-- on the xml schema collection.
SETUSER
GO
REVOKE VIEW DEFINITION ON XML SCHEMA COLLECTION::dbo.MySC FROM schemaUser
GO
-- Now schemaUser cannot see the contents of 
-- the collection anymore.
SETUSER 'schemaUser'
GO
SELECT XML_SCHEMA_NAMESPACE(N'dbo',N'MySC')
GO