sys.database_principals (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

Devuelve una fila para cada entidad de seguridad de una base de datos de SQL Server.

Nota:

El identificador de Microsoft Entra se conocía anteriormente como Azure Active Directory (Azure AD).

Descripciones de columnas

Nombre de la columna Tipo de datos Descripción
name sysname Nombre de la entidad de seguridad, único en la base de datos.
principal_id int Id. de la entidad de seguridad, único en la base de datos.
type char(1) Tipo de entidad de seguridad:

A = Rol de aplicación

C = Usuario asignado a un certificado

E = Usuario externo de Microsoft Entra ID

G = Grupo de Windows

K = Usuario asignado a una clave asimétrica

R = Rol de base de datos

S = Usuario de SQL

U = Usuario de Windows

X = Grupo externo del grupo o aplicaciones de Microsoft Entra
type_desc nvarchar(60) Descripción del tipo de entidad de seguridad.

APPLICATION_ROLE

CERTIFICATE_MAPPED_USER

EXTERNAL_USER

WINDOWS_GROUP

ASYMMETRIC_KEY_MAPPED_USER

DATABASE_ROLE

SQL_USER

WINDOWS_USER

EXTERNAL_GROUPS
default_schema_name sysname Nombre que se va a usar cuando el nombre SQL no especifique un esquema. Null para entidades de seguridad que no son del tipo S, U o A.
create_date datetime Hora en que se creó la entidad de seguridad.
modify_date datetime Hora en que se modificó por última vez la entidad de seguridad.
owning_principal_id int Id. de la entidad de seguridad propietaria de esta entidad de seguridad. De forma predeterminada, todos los roles fijos de base de datos son propiedad de dbo.
sid varbinary(85) SID (identificador de seguridad) de la entidad de seguridad. NULL para SYS e INFORMATION SCHEMAS.
is_fixed_role bit Si es 1, esta fila representa una entrada para uno de los roles fijos de base de datos: db_owner, db_accessadmin, db_datareader, db_datawriter, db_ddladmin, db_securityadmin, db_backupoperator, db_denydatareader, db_denydatawriter.
authentication_type int Válido para : SQL Server 2012 (11.x) y versiones posteriores.

Tipo de autenticación. Estos son los valores posibles y sus descripciones.

0: sin autenticación
1: autenticación de instancia
2: autenticación de base de datos
3: autenticación de Windows
4: Autenticación de Microsoft Entra
authentication_type_desc nvarchar(60) Válido para : SQL Server 2012 (11.x) y versiones posteriores.

Descripción del tipo de autenticación. Estos son los valores posibles y sus descripciones.

NONE: sin autenticación
INSTANCE: autenticación de instancia
DATABASE: autenticación de base de datos
WINDOWS: autenticación de Windows
EXTERNAL: Autenticación de Microsoft Entra
default_language_name sysname Válido para : SQL Server 2012 (11.x) y versiones posteriores.

Idioma predeterminado para esta entidad de seguridad.
default_language_lcid int Válido para : SQL Server 2012 (11.x) y versiones posteriores.

LCID predeterminado para esta entidad de seguridad.
allow_encrypted_value_modifications bit Se aplica a: SQL Server 2016 (13.x) y versiones posteriores, SQL Database

Suprime las comprobaciones de metadatos criptográficos en el servidor en operaciones de copia masiva. Esto permite al usuario realizar una copia masiva de los datos cifrados mediante Always Encrypted entre tablas o bases de datos sin tener que descifrar los datos. El valor predeterminado es OFF.

Observaciones

Las propiedades PasswordLastSetTime están disponibles en todas las configuraciones admitidas de SQL Server, pero las restantes propiedades solo están disponibles cuando SQL Server se ejecuta en Windows Server 2003, o cualquier versión posterior, y tanto CHECK_POLICY como CHECK_EXPIRATION están habilitadas. Para más información, consulte Directiva de contraseñas. Los valores de principal_id se pueden reutilizar si se han quitado las entidades de seguridad y, por lo tanto, no se pueda garantizar que vayan a crecer constantemente.

Permisos

Cualquier usuario puede ver su propio nombre de usuario, los usuarios del sistema y los roles fijos de base de datos. Para ver otros usuarios, requiere ALTER ANY USER o un permiso en el usuario. Para ver los roles definidos por el usuario, se requiere ALTER ANY ROLE o la pertenencia al rol.

Ejemplos

A: Enumerar todos los permisos de entidades de seguridad de base de datos

La consulta siguiente enumera los permisos que se otorgan o deniegan específicamente a las entidades de seguridad de base de datos.

Importante

Los permisos de roles fijos de base de datos no aparecen en sys.database_permissions. Por tanto, es posible que las entidades de seguridad de base de datos tengan permisos adicionales que no aparezcan aquí.

SELECT pr.principal_id, pr.name, pr.type_desc,   
    pr.authentication_type_desc, pe.state_desc, pe.permission_name  
FROM sys.database_principals AS pr  
JOIN sys.database_permissions AS pe  
    ON pe.grantee_principal_id = pr.principal_id;  

B: Enumerar permisos para objetos de esquema en una base de datos

La consulta siguiente se combina con sys.database_principals y sys.database_permissions para que sys.objects y sys.schemas enumeren los permisos otorgados o denegados a objetos de esquema específicos.

SELECT pr.principal_id, pr.name, pr.type_desc,   
    pr.authentication_type_desc, pe.state_desc,   
    pe.permission_name, s.name + '.' + o.name AS ObjectName  
FROM sys.database_principals AS pr  
JOIN sys.database_permissions AS pe  
    ON pe.grantee_principal_id = pr.principal_id  
JOIN sys.objects AS o  
    ON pe.major_id = o.object_id  
JOIN sys.schemas AS s  
    ON o.schema_id = s.schema_id;  

Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)

C: enumerar todos los permisos de las entidades de seguridad de la base de datos

La consulta siguiente enumera los permisos que se otorgan o deniegan específicamente a las entidades de seguridad de base de datos.

Importante

Los permisos de los roles fijos de base de datos no aparecen en sys.database_permissions. Por tanto, es posible que las entidades de seguridad de base de datos tengan permisos adicionales que no aparezcan aquí.

SELECT pr.principal_id, pr.name, pr.type_desc,   
    pr.authentication_type_desc, pe.state_desc, pe.permission_name  
FROM sys.database_principals AS pr  
JOIN sys.database_permissions AS pe  
    ON pe.grantee_principal_id = pr.principal_id;  

B: enumerar permisos para objetos de esquema en una base de datos

La consulta siguiente combina sys.database_principals y sys.database_permissions con sys.objects y sys.schemas para enumerar los permisos otorgados o denegados a objetos de esquema concretos.

SELECT pr.principal_id, pr.name, pr.type_desc,   
    pr.authentication_type_desc, pe.state_desc,   
    pe.permission_name, s.name + '.' + o.name AS ObjectName  
FROM sys.database_principals AS pr  
JOIN sys.database_permissions AS pe  
    ON pe.grantee_principal_id = pr.principal_id  
JOIN sys.objects AS o  
    ON pe.major_id = o.object_id  
JOIN sys.schemas AS s  
    ON o.schema_id = s.schema_id;  

Consulte también

Entidades de seguridad (motor de base de datos)
sys.server_principals (Transact-SQL)
Vistas de catálogo de seguridad (Transact-SQL)
Usuarios de base de datos independientes: hacer que la base de datos sea portátil
Conectar a Azure SQL con la autenticación de Microsoft Entra