ALTER AUTHORIZATION (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de análisis SQL en Microsoft FabricAlmacenamiento en Microsoft Fabric

Cambia la propiedad de un elemento protegible.

Convenciones de sintaxis de Transact-SQL

Nota:

Microsoft Entra ID es el nuevo nombre de Azure Active Directory (Azure AD). Estamos actualizando la documentación en este momento.

Sintaxis

-- 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
    }

Nota:

El grupo de SQL sin servidor no admite esta sintaxis en Azure Synapse Analytics.

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

<class_type> Es la clase protegible de la entidad para la que se va a cambiar el propietario. El valor predeterminado es OBJECT.

Clase Producto
OBJECT Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores, Azure SQL Database, Azure Synapse Analytics y Analytics Platform System (PDW).
ASSEMBLY Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores, y Azure SQL Database.
ASYMMETRIC KEY Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores, y Azure SQL Database.
AVAILABILITY GROUP Se aplica a: SQL Server 2012 y versiones posteriores.
CERTIFICADO Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores, y Azure SQL Database.
CONTRACT Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores.
DATABASE Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores, y Azure SQL Database. Para más información, consulte ALTER AUTHORIZATION para bases de datos.
ENDPOINT Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores.
FULLTEXT CATALOG Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores, y Azure SQL Database.
FULLTEXT STOPLIST Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores, y Azure SQL Database.
MESSAGE TYPE Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores.
REMOTE SERVICE BINDING Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores.
ROLE Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores, y Azure SQL Database.
ROUTE Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores.
SCHEMA Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores, Azure SQL Database, Azure Synapse Analytics y Analytics Platform System (PDW).
SEARCH PROPERTY LIST Se aplica a: SQL Server 2012 (11.x) y versiones posteriores, y a Azure SQL Database.
SERVER ROLE Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores.
SERVICE Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores.
SYMMETRIC KEY Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores, y Azure SQL Database.
TYPE Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores, y Azure SQL Database.
XML SCHEMA COLLECTION Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores, y Azure SQL Database.

entity_name es el nombre de la entidad.

principal_name | SCHEMA OWNER: nombre del propietario del esquema de la entidad de seguridad que será propietaria de la entidad. Los objetos de base de datos deben tener una entidad de base de datos como propietaria; un usuario o rol de base de datos. Los objetos de servidor (como bases de datos) deben tener una entidad de servidor (un inicio de sesión) como propietaria. Indique SCHEMA OWNER como *principal_name para indicar que el objeto debe tener como propietaria la entidad que posee el esquema del objeto.

Observaciones

Se puede usar ALTER AUTHORIZATION para cambiar la propiedad de cualquier entidad que tenga propietario. La propiedad de las entidades que contienen bases de datos se puede transferir a cualquier entidad de seguridad de nivel de base de datos. La propiedad de las entidades de nivel de servidor solo se puede transferir a entidades de seguridad de nivel de servidor.

Importante

A partir de SQL Server 2005 (9.x), un usuario puede ser propietario de un objeto o un tipo contenido en un esquema de otro usuario de la base de datos. Es un cambio de comportamiento con respecto a versiones anteriores de SQL Server. Para obtener más información, consulte OBJECTPROPERTY (Transact-SQL) y TYPEPROPERTY (Transact-SQL).

Se puede transferir la propiedad de las siguientes entidades contenidas en esquemas de tipo "objeto": tablas, vistas, funciones, procedimientos, colas y sinónimos.

No se puede transferir la propiedad de las siguientes entidades: servidores vinculados, estadísticas, restricciones, reglas, valores predeterminados, desencadenadores, colas de Service Broker, credenciales, funciones de partición, esquemas de partición, claves maestras de bases de datos, clave maestra de servicios y notificaciones de eventos.

No se puede transferir la propiedad de los miembros de las siguientes clases de elementos protegibles: servidor, inicio de sesión, usuario, rol de aplicación y columna.

La opción SCHEMA OWNER solo es válida cuando se transfiere la propiedad de una entidad que contiene esquemas. SCHEMA OWNER transferirá la propiedad de la entidad al propietario del esquema en el que reside. Solo las entidades de clase OBJECT, TYPE o XML SCHEMA COLLECTION contienen esquemas.

Si la entidad de destino no es una base de datos y la entidad se va a transferir a un nuevo propietario, se quitarán todos los permisos del destino.

Precaución

En SQL Server 2005 (9.x), el comportamiento de los esquemas es distinto del de las versiones anteriores de SQL Server. Si en el código se supone que los esquemas son equivalentes a usuarios de base de datos, los resultados obtenidos podrían ser incorrectos. No se deben usar vistas de catálogo antiguas, como sysobjects, en una base de datos en la que nunca se haya usado ninguna de las instrucciones DDL siguientes: 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. En una base de datos en la que se ha usado alguna de estas instrucciones, deben usarse las nuevas vistas de catálogo. En las nuevas vistas de catálogo se tiene en cuenta la separación de entidades de seguridad y esquemas que se presentó en SQL Server 2005 (9.x). Para obtener más información sobre las vistas de catálogo, vea Vistas de catálogo (Transact-SQL).

Tenga en cuenta los siguientes aspectos:

Importante

La única manera confiable de localizar al propietario de un objeto consiste en consultar la vista de catálogo sys.objects. La única manera confiable de localizar al propietario de un tipo consiste en utilizar la función TYPEPROPERTY.

Condiciones y casos especiales

En la siguiente tabla se enumeran los casos especiales, las excepciones y las condiciones que se aplican para modificar la autorización.

Clase Condición
OBJECT No se puede cambiar la propiedad de desencadenadores, restricciones, reglas, valores predeterminados, estadísticas, objetos del sistema, colas, vistas indizadas o tablas con vistas indizadas.
SCHEMA Cuando se transfiere la propiedad, se quitarán los permisos en objetos contenidos en esquemas que no tengan propietarios explícitos. No se puede cambiar el propietario de sys, dbo o information_schema.
TYPE No se puede cambiar la propiedad de un TYPE que pertenece a sys o information_schema.
CONTRACT, MESSAGE TYPE o SERVICE No se puede cambiar la propiedad de entidades del sistema.
SYMMETRIC KEY No se puede cambiar la propiedad de claves globales temporales.
CERTIFICATE o ASYMMETRIC KEY No se puede transferir la propiedad de estas entidades a un rol o un grupo.
ENDPOINT La entidad de seguridad debe ser un inicio de sesión.

ALTER AUTHORIZATION para bases de datos

Para SQL Server

Requisitos del nuevo propietario: La nueva entidad propietaria debe ser una de las siguientes:

  • Un inicio de sesión para la autenticación de SQL Server.
  • Un inicio de sesión para la autenticación de Windows que represente un usuario de Windows (no un grupo).
  • Un usuario de Windows que se autentica a través de un inicio de sesión de autenticación de Windows que representa un grupo de Windows.

Requisitos de la persona que ejecuta la instrucción ALTER AUTHORIZATION: Si no es un miembro del rol fijo de servidor sysadmin, debe tener al menos el permiso TAKE OWNERSHIP en la base de datos y el permiso IMPERSONATE en el nuevo inicio de sesión de propietario.

En Azure SQL Database

Requisitos del nuevo propietario: La nueva entidad propietaria debe ser una de las siguientes:

  • Un inicio de sesión para la autenticación de SQL Server.
  • Un usuario federado (no un grupo) presente en el identificador de Entra de Microsoft.
  • Un usuario administrado (no un grupo) o una aplicación presente en el identificador de Microsoft Entra.

Si el nuevo propietario es un usuario de Microsoft Entra, no puede existir como usuario en la base de datos donde el nuevo propietario se convertirá en el nuevo propietario de la base de datos (dbo). El usuario de Microsoft Entra debe quitarse primero de la base de datos antes de ejecutar la instrucción ALTER AUTHORIZATION cambiando la propiedad de la base de datos al nuevo usuario. Para obtener más información sobre cómo configurar usuarios de Microsoft Entra con SQL Database, vea Configurar la autenticación de Microsoft Entra.

Requisitos de la persona que ejecuta la instrucción ALTER AUTHORIZATION: Debe conectarse a la base de datos de destino para cambiar el propietario de dicha base de datos.

El propietario de una base de datos se puede cambiar en los siguientes tipos de cuentas.

  • Inicio de sesión de entidad de servicio, que es el administrador de SQL aprovisionado cuando se creó el servidor lógico en Azure .
  • Administrador de Microsoft Entra para el servidor lógico.
  • El propietario actual de la base de datos.

En la tabla siguiente se resumen los requisitos:

Ejecutor Destino Resultado
Inicio de sesión para la autenticación de SQL Server Inicio de sesión para la autenticación de SQL Server Correcto
Inicio de sesión para la autenticación de SQL Server Usuario de Microsoft Entra Error
Usuario de Microsoft Entra Inicio de sesión para la autenticación de SQL Server Correcto
Usuario de Microsoft Entra Usuario de Microsoft Entra Correcto

Para comprobar el propietario de Microsoft Entra de la base de datos, ejecute el siguiente comando de Transact-SQL en una base de datos de usuario (en este ejemplo testdb).

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

La salida será un GUID (como XXXXXXXX-XXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) que corresponde al identificador de objeto del usuario o entidad de servicio de Microsoft Entra asignado como propietario de la base de datos. Para comprobarlo, compruebe el identificador de objeto del usuario en El id. de Microsoft Entra. Cuando un usuario de inicio de sesión para la autenticación de SQL Server es el propietario de la base de datos, ejecute la instrucción siguiente en la base de datos maestra para verificar el propietario de la base de datos:

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;

Procedimiento recomendado

En lugar de usar usuarios de Microsoft Entra como propietarios individuales de la base de datos, use un grupo de Microsoft Entra como miembro del rol fijo de base de datos db_owner . En los pasos siguientes se muestra cómo configurar un inicio de sesión deshabilitado como propietario de la base de datos y convertir un grupo de Microsoft Entra (mydbogroup) en un miembro del rol de db_owner .

  1. Inicie sesión en SQL Server como administrador de Microsoft Entra y cambie el propietario de la base de datos a un inicio de sesión de autenticación de SQL Server deshabilitado. Por ejemplo, desde la base de datos de usuario, ejecute:

    ALTER AUTHORIZATION ON database::testdb TO DisabledLogin;
    
  2. Cree un grupo de Microsoft Entra que deba poseer la base de datos y agréguelo como usuario a la base de datos de usuario. Por ejemplo:

    CREATE USER [mydbogroup] FROM EXTERNAL PROVIDER;
    
  3. En la base de datos de usuario, agregue el usuario que representa el grupo Microsoft Entra al rol fijo de base de datos db_owner . Por ejemplo:

    ALTER ROLE db_owner ADD MEMBER mydbogroup;
    

Ahora, los miembros mydbogroup pueden administrar centralmente la base de datos como miembros del rol db_owner.

  • Cuando los miembros de este grupo se quitan del grupo Microsoft Entra, pierden automáticamente los permisos dbo para esta base de datos.
  • Del mismo modo, si se agregan nuevos miembros al mydbogroup grupo Microsoft Entra, obtienen automáticamente el acceso dbo para esta base de datos.

Para comprobar si un usuario específico tiene el permiso de propietario de base de datos en vigor, pídale que ejecute la instrucción siguiente:

SELECT IS_MEMBER ('db_owner');

Si el valor devuelto es 1, significa que el usuario es un miembro del rol.

Permisos

Requiere el permiso TAKE OWNERSHIP en la entidad. Si el propietario no es el usuario que ejecuta esta instrucción, también se necesita, 1) el permiso IMPERSONATE en el nuevo propietario si es un usuario o inicio de sesión; o 2) si el nuevo propietario es un rol, debe pertenecer al rol, o el permiso ALTER en el rol; o 3) si el nuevo propietario es un rol de aplicación, el permiso ALTER en el rol de aplicación.

Ejemplos

A. Transferir la propiedad de una tabla

En el siguiente ejemplo se transfiere la propiedad de la tabla Sprockets al usuario MichikoOsada. La tabla se encuentra dentro del esquema Parts.

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

La consulta también podría ser similar a la siguiente:

ALTER AUTHORIZATION ON Parts.Sprockets TO MichikoOsada;
GO

Si el esquema de los objetos no se incluye como parte de la instrucción, el Motor de base de datos buscará el objeto en el esquema predeterminado de los usuarios. Por ejemplo:

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

B. Transferir la propiedad de una vista al propietario del esquema

En el siguiente ejemplo se transfiere la propiedad de la vista ProductionView06 al propietario del esquema que la contiene. La vista se encuentra dentro del esquema Production.

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

C. Transferir la propiedad de un esquema a un usuario

En el siguiente ejemplo se transfiere la propiedad del esquema SeattleProduction11 al usuario SandraAlayo.

ALTER AUTHORIZATION ON SCHEMA::SeattleProduction11 TO SandraAlayo;
GO

D. Transferir la propiedad de un extremo a un inicio de sesión de SQL Server

En el siguiente ejemplo se transfiere la propiedad del extremo CantabSalesServer1 a JaePak. Puesto que el extremo es un elemento protegible de nivel de servidor, el extremo solo puede transferirse a una entidad de seguridad de nivel de servidor.

Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores.

ALTER AUTHORIZATION ON ENDPOINT::CantabSalesServer1 TO JaePak;
GO

E. Cambiar el propietario de una tabla

En todos los ejemplos siguientes se cambia el propietario de la tabla Sprockets en la base de datos Parts por el usuario de base de datos 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. Cambiar el propietario de una base de datos

Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores, Analytics Platform System (PDW) y SQL Database.

En el ejemplo siguiente, se cambia el propietario de la base de datos Parts por el inicio de sesión MichikoOsada.

ALTER AUTHORIZATION ON DATABASE::Parts TO MichikoOsada;

G. Cambio del propietario de una base de datos a un usuario de Microsoft Entra

En el ejemplo siguiente, un administrador de Microsoft Entra para SQL Server en una organización con un dominio personalizado de Microsoft Entra denominado cqclinic.onmicrosoft.com, puede cambiar la propiedad actual de una base de datos targetDB y convertir a un usuario richel@cqclinic.onmicorsoft.com de Microsoft Entra existente en el nuevo propietario de la base de datos mediante el siguiente comando:

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

Consulte también

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