Бөлісу құралы:


ALTER AUTHORIZATION (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в Microsoft Fabric

Изменяет владельца защищаемой сущности.

Соглашения о синтаксисе Transact-SQL

Примечание.

Идентификатор Microsoft Entra ранее был известен как Azure Active Directory (Azure AD).

Синтаксис

-- Syntax for SQL Server
ALTER AUTHORIZATION
    ON [ <class_type>:: ] entity_name
    TO { principal_name | SCHEMA OWNER }
    [;]

<class_type> ::=
     {
      OBJECT | ASSEMBLY | ASYMMETRIC KEY | AVAILABILITY GROUP | CERTIFICATE
    | CONTRACT | TYPE | DATABASE | ENDPOINT | FULLTEXT CATALOG
    | FULLTEXT STOPLIST | MESSAGE TYPE | REMOTE SERVICE BINDING
    | ROLE | ROUTE | SCHEMA | SEARCH PROPERTY LIST | SERVER ROLE
    | SERVICE | SYMMETRIC KEY | XML SCHEMA COLLECTION
     }
-- Syntax for SQL Database

ALTER AUTHORIZATION
    ON [ <class_type>:: ] entity_name
    TO { principal_name | SCHEMA OWNER }
    [;]

<class_type> ::=
     {
    OBJECT | ASSEMBLY | ASYMMETRIC KEY | CERTIFICATE
     | TYPE | DATABASE | FULLTEXT CATALOG
     | FULLTEXT STOPLIST
     | ROLE | SCHEMA | SEARCH PROPERTY LIST
     | SYMMETRIC KEY | XML SCHEMA COLLECTION
     }
-- Syntax for Azure Synapse Analytics and Microsoft Fabric

ALTER AUTHORIZATION ON
     [ <class_type> :: ] <entity_name>
     TO { principal_name | SCHEMA OWNER }
    [;]

    <class_type> ::= {
    SCHEMA
     | OBJECT
    }

    <entity_name> ::=
    {
    schema_name
     | [ schema_name. ] object_name
    }
-- Syntax for Parallel Data Warehouse

ALTER AUTHORIZATION ON
     [ <class_type> :: ] <entity_name>
     TO { principal_name | SCHEMA OWNER }
    [;]

<class_type> ::= {
    DATABASE
     | SCHEMA
     | OBJECT
    }

<entity_name> ::=
    {
    database_name
     | schema_name
     | [ schema_name. ] object_name
    }

Примечание.

Этот синтаксис не поддерживается бессерверным пулом SQL в Azure Synapse Analytics.

Аргументы

<class_type> Защищаемый класс сущности, для которой изменяется владелец. По умолчанию это класс OBJECT.

Класс Продукт
OBJECT Область применения: SQL Server 2008 (10.0.x) и более поздних версий, База данных SQL Azure, Azure Synapse Analytics, Analytics Platform System (PDW).
ASSEMBLY Область применения: SQL Server 2008 (10.0.x) и более поздних версий База данных SQL Azure.
ASYMMETRIC KEY Область применения: SQL Server 2008 (10.0.x) и более поздних версий База данных SQL Azure.
AVAILABILITY GROUP Область применения: SQL Server 2012 и более поздние версии.
СЕРТИФИКАТ Область применения: SQL Server 2008 (10.0.x) и более поздних версий База данных SQL Azure.
CONTRACT Применимо: SQL Server 2008 (10.0.x) и более поздних версий.
DATABASE Область применения: SQL Server 2008 (10.0.x) и более поздних версий База данных SQL Azure. Дополнительные сведения см. в статье об ALTER AUTHORIZATION для баз данных.
КОНЕЧНАЯ ТОЧКА Применимо: SQL Server 2008 (10.0.x) и более поздних версий.
FULLTEXT CATALOG Область применения: SQL Server 2008 (10.0.x) и более поздних версий База данных SQL Azure.
FULLTEXT STOPLIST Область применения: SQL Server 2008 (10.0.x) и более поздних версий База данных SQL Azure.
MESSAGE TYPE Применимо: SQL Server 2008 (10.0.x) и более поздних версий.
REMOTE SERVICE BINDING Применимо: SQL Server 2008 (10.0.x) и более поздних версий.
РОЛЬ Область применения: SQL Server 2008 (10.0.x) и более поздних версий База данных SQL Azure.
ROUTE Применимо: SQL Server 2008 (10.0.x) и более поздних версий.
СХЕМА Область применения: SQL Server 2008 (10.0.x) и более поздних версий, База данных SQL Azure, Azure Synapse Analytics, Analytics Platform System (PDW).
SEARCH PROPERTY LIST Область применения: SQL Server 2012 (11.x) и более поздние версии, База данных SQL Azure.
РОЛЬ СЕРВЕРА Применимо: SQL Server 2008 (10.0.x) и более поздних версий.
SERVICE Применимо: SQL Server 2008 (10.0.x) и более поздних версий.
SYMMETRIC KEY Область применения: SQL Server 2008 (10.0.x) и более поздних версий База данных SQL Azure.
ТИП Область применения: SQL Server 2008 (10.0.x) и более поздних версий База данных SQL Azure.
XML SCHEMA COLLECTION Область применения: SQL Server 2008 (10.0.x) и более поздних версий База данных SQL Azure.

entity_name — имя сущности.

principal_name | SCHEMA OWNER —имя субъекта безопасности, который будет являться владельцем сущности. Объекты базы данных должны принадлежать субъекту базы данных; пользователю базы данных или роли. Объекты сервера (такие как базы данных) должны принадлежать субъекту сервера (имя для входа). Определите SCHEMA OWNER в качестве *principal_name-, чтобы показать, что объект должен принадлежать участнику, который владеет схемой объекта.

Замечания

Инструкция ALTER AUTHORIZATION может использоваться для изменения владельца любой сущности, у которой он есть. Владение содержащимися в базе данных сущностями можно передать любому участнику уровня базы данных. Владение сущностями уровня сервера можно передать только участникам уровня сервера.

Внимание

Начиная с SQL Server 2005 (9.x), пользователь может принадлежать объекту или типу, который содержится схемой, принадлежащей другому пользователю базы данных. Это изменение поведения с более ранних версий SQL Server. Дополнительные сведения см. в разделах OBJECTPROPERTY (Transact-SQL) и TYPEPROPERTY (Transact-SQL).

Владение можно передавать для следующих, содержащихся в схемах сущностей типа «объект»: таблиц, представлений, функций, процедур, очередей и синонимов.

Невозможно передать владение следующими сущностями: связанные серверы, статистика, ограничения, правила, значения по умолчанию, триггеры, очереди Service Broker, учетные данные, функции секционирования, схемы секционирования, основные ключи базы данных, главный ключ службы и уведомления о событиях.

Нельзя передавать владение элементами следующих защищаемых классов: сервером, именем входа, пользователем, ролью приложения и столбцом.

Аргумент SCHEMA OWNER допустим только в случае передачи владения сущностью, содержащейся в схеме. Аргумент SCHEMA OWNER позволяет передать владение сущностью владельцу схемы, в которой она находится. В схемах содержатся только сущности классов OBJECT, TYPE или XML SCHEMA COLLECTION.

Если целевая сущность не представляет собой базу данных, а передаваемая сущность передается новому владельцу, все разрешения на целевую сущность удаляются.

Внимание

В SQL Server 2005 (9.x) поведение схем изменилось от поведения в более ранних версиях SQL Server. Код, предполагающий, что схемы эквивалентны пользователям базы данных, может возвращать неверные результаты. Старые представления каталогов, включая sysobjects, не должны использоваться в базах данных, где когда-либо выполнялась любая из следующих инструкций DDL: CREATE SCHEMA, ALTER SCHEMA, DROP SCHEMA, CREATE USER, ALTER USER, DROP USER, CREATE ROLE, ALTER ROLE, DROP ROLE, CREATE APPROLE, ALTER APPROLE, DROP APPROLE, ALTER AUTHORIZATION. В базе данных, в которой когда-либо выполнялась любая из этих инструкций, необходимо использовать новые представления каталога. Новые представления каталога учитывают разделение субъектов и схем, представленных в SQL Server 2005 (9.x). Дополнительные сведения о представлениях каталога см. в разделе "Представления каталога" (Transact-SQL).

Имейте в виду следующее:

Внимание

Единственный надежный способ найти владельца объекта — запросить представление каталога sys.objects. Единственный надежный способ найти владельца типа — использовать функцию TYPEPROPERTY.

Особые случаи и условия

В следующей таблице перечислены особые случаи, исключения и условия, касающиеся изменения авторизации.

Класс Condition
OBJECT Нельзя изменить владельца триггеров, ограничений, правил, значений по умолчанию, статистик, системных объектов, очередей, индексированных представлений и таблиц с индексированными представлениями.
СХЕМА При передаче владения разрешения на содержащиеся в схеме объекты, у которых нет явных владельцев, удаляются. Нельзя изменить владельца схем sys, dbo и information_schema.
ТИП Нельзя изменить владельца сущности TYPE, принадлежащей схеме sys или information_schema.
CONTRACT, MESSAGE TYPE или SERVICE Нельзя изменить владельца системных сущностей.
SYMMETRIC KEY Нельзя изменить владельца глобальных временных ключей.
CERTIFICATE или ASYMMETRIC KEY Нельзя передавать владение данными сущностями роли или группе.
КОНЕЧНАЯ ТОЧКА Участник должен представлять собой имя входа в систему.

ALTER AUTHORIZATION для баз данных

Для SQL Server

Требования к новому владельцу: новый субъект-владелец должен быть одним из следующих:

  • имя входа для проверки подлинности SQL Server;
  • имя входа для проверки подлинности Windows, представляющее пользователя Windows (а не группу);
  • пользователь Windows, проходящий проверку подлинности с использованием имени входа для проверки подлинности Windows, представляющего группу Windows.

Требования для пользователя, выполняющего инструкцию ALTER AUTHORIZATION: если вы не являетесь членом предопределенной роли сервера sysadmin , необходимо иметь по крайней мере разрешение TAKE OWNER в базе данных и иметь разрешение IMPERSONATE на новое имя входа владельца.

Для Базы данных SQL Azure

Требования к новому владельцу: новый субъект-владелец должен быть одним из следующих:

  • имя входа для проверки подлинности SQL Server;
  • Федеративный пользователь (а не группа) присутствует в идентификаторе Microsoft Entra.
  • Управляемый пользователь (а не группа) или приложение, присутствующих в идентификаторе Microsoft Entra.

Если новый владелец является пользователем Microsoft Entra, он не может существовать как пользователь в базе данных, где новый владелец станет новым владельцем базы данных (dbo). Сначала пользователь Microsoft Entra должен быть удален из базы данных перед выполнением инструкции ALTER AUTHORIZATION, изменив владение базой данных новым пользователем. Дополнительные сведения о настройке пользователей Microsoft Entra с База данных SQL см. в разделе "Настройка проверки подлинности Microsoft Entra".

Требования для пользователя, выполняющего инструкцию ALTER AUTHORIZATION: необходимо подключиться к целевой базе данных, чтобы изменить владельца этой базы данных.

Изменить владельца базы данных могут следующие типы учетных записей.

  • Имя входа субъекта уровня обслуживания, которое является администратором SQL, подготовленным при создании логического сервера в Azure .
  • Администратор Microsoft Entra для логического сервера..
  • Текущий владелец базы данных.

Следующая таблица содержит сводку требований.

Исполнитель Назначение Результат
Имя входа для проверки подлинности SQL Server Имя входа для проверки подлинности SQL Server Удачное завершение
Имя входа для проверки подлинности SQL Server Пользователь Microsoft Entra Сбой
Пользователь Microsoft Entra Имя входа для проверки подлинности SQL Server Удачное завершение
Пользователь Microsoft Entra Пользователь Microsoft Entra Удачное завершение

Чтобы проверить владельца базы данных Microsoft Entra, выполните следующую команду Transact-SQL в пользовательской базе данных (в этом примере testdb).

SELECT CAST(owner_sid as uniqueidentifier) AS Owner_SID
FROM sys.databases
WHERE name = 'testdb';

Выходные данные будут GUID (например, XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXXXXXXX), который соответствует идентификатору объекта пользователя Microsoft Entra или субъекта-службы, назначенного владельцем базы данных. Это можно проверить, проверив идентификатор объекта пользователя в идентификаторе Microsoft Entra ID. Если владельцем базы данных SQL Server является пользователь имени входа, выполните следующую инструкцию в базе данных master для проверки владельца базы данных:

SELECT d.name, d.owner_sid, sl.name
FROM sys.databases AS d
JOIN sys.sql_logins AS sl
ON d.owner_sid = sl.sid;

Рекомендация

Вместо использования пользователей Microsoft Entra в качестве отдельных владельцев базы данных используйте группу Microsoft Entra в качестве члена предопределенной роли базы данных db_owner . Ниже показано, как настроить отключенное имя входа в качестве владельца базы данных и сделать группу Microsoft Entra (mydbogroup) членом роли db_owner .

  1. Войдите в SQL Server от имени администратора Microsoft Entra и измените владельца базы данных на отключенное имя входа проверки подлинности SQL Server. Например, в базе данных пользователя выполните следующую команду:

    ALTER AUTHORIZATION ON database::testdb TO DisabledLogin;
    
  2. Создайте группу Microsoft Entra, которая должна принадлежать базе данных и добавить ее в базу данных пользователя. Например:

    CREATE USER [mydbogroup] FROM EXTERNAL PROVIDER;
    
  3. В пользовательской базе данных добавьте пользователя, представляющего группу Microsoft Entra, в роль db_owner предопределенных баз данных. Например:

    ALTER ROLE db_owner ADD MEMBER mydbogroup;
    

Теперь члены mydbogroup могут централизованно управлять базой данных как члены роли db_owner.

  • Когда члены этой группы удаляются из группы Microsoft Entra, они автоматически теряют разрешения dbo для этой базы данных.
  • Аналогично, если новые члены добавляются в mydbogroup группу Microsoft Entra, они автоматически получают доступ к dbo для этой базы данных.

Чтобы проверить наличие действующего разрешения dbo у конкретного пользователя, пользователь должен выполнить следующую инструкцию:

SELECT IS_MEMBER ('db_owner');

Возвращаемое значение 1 указывает, что пользователь является членом роли.

Разрешения

Требует разрешения TAKE OWNERSHIP для сущности. Если новый владелец не является пользователем, выполняющим данную инструкцию, также требуется одно из следующих условий: 1) разрешение IMPERSONATE для нового владельца, если это пользователь или имя входа; 2) если новый владелец представляет собой роль — членство в роли или разрешение ALTER для этой роли; 3) если новый владелец представляет собой роль приложения — разрешение ALTER для роли приложения.

Примеры

А. Передача владения таблицей

В следующем примере владение таблицей Sprockets передается пользователю MichikoOsada. Эта таблица расположена в схеме Parts.

ALTER AUTHORIZATION ON OBJECT::Parts.Sprockets TO MichikoOsada;
GO

Запрос также может выглядеть следующим образом:

ALTER AUTHORIZATION ON Parts.Sprockets TO MichikoOsada;
GO

Если схема объектов не включена в инструкцию, ядро СУБД будет искать объект в схеме по умолчанию для пользователей. Например:

ALTER AUTHORIZATION ON Sprockets TO MichikoOsada;
ALTER AUTHORIZATION ON OBJECT::Sprockets TO MichikoOsada;

B. Передача владения представлением владельцу схемы

В следующем примере передается владение представлением ProductionView06 владельцу содержащей его схемы. Это представление расположено в схеме Production.

ALTER AUTHORIZATION ON OBJECT::Production.ProductionView06 TO SCHEMA OWNER;
GO

C. Передача владения схемой пользователю

В следующем примере владение схемой SeattleProduction11 передается пользователю SandraAlayo.

ALTER AUTHORIZATION ON SCHEMA::SeattleProduction11 TO SandraAlayo;
GO

D. Передача владения конечной точкой имени входа в SQL Server

В следующем примере владение конечной точкой CantabSalesServer1 передается JaePak. Так как конечная точка представляет собой защищаемую сущность уровня сервера, ее можно передать только участнику уровня сервера.

Применимо: SQL Server 2008 (10.0.x) и более поздних версий.

ALTER AUTHORIZATION ON ENDPOINT::CantabSalesServer1 TO JaePak;
GO

Е. Изменение владельца таблицы

В каждом из следующих примеров показано изменение владельца таблицы Sprockets в базе данных Parts на пользователя базы данных MichikoOsada.

ALTER AUTHORIZATION ON Sprockets TO MichikoOsada;
ALTER AUTHORIZATION ON dbo.Sprockets TO MichikoOsada;
ALTER AUTHORIZATION ON OBJECT::Sprockets TO MichikoOsada;
ALTER AUTHORIZATION ON OBJECT::dbo.Sprockets TO MichikoOsada;

F. Изменение владельца базы данных

Применимо к: SQL Server 2008 (10.0.x) и более поздних версий, База данных SQL.

В следующем примере показано, как изменить владельца базы данных Parts на имя входа MichikoOsada.

ALTER AUTHORIZATION ON DATABASE::Parts TO MichikoOsada;

G. Изменение владельца базы данных на пользователя Microsoft Entra

В следующем примере администратор Microsoft Entra для SQL Server в организации с пользовательским доменом cqclinic.onmicrosoft.comMicrosoft Entra может изменить текущее владение базой данных и сделать существующего пользователя richel@cqclinic.onmicorsoft.com Microsoft Entra новым владельцем базы данных targetDB с помощью следующей команды:

ALTER AUTHORIZATION ON database::targetDB TO [rachel@cqclinic.onmicrosoft.com];

См. также

OBJECTPROPERTY (Transact-SQL)TYPEPROPERTY (Transact-SQL)EVENTDATA (Transact-SQL)