Roles en el nivel de base de datos
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Para administrar con facilidad los permisos en las bases de datos, SQL Server proporciona varios roles, que son las entidades de seguridad que agrupan otras entidades de seguridad. Son como los grupos del sistema operativo Windows. Los roles de nivel de base de datos se aplican a toda la base de datos en lo que respecta a su ámbito de permisos.
Para agregar y quitar usuarios en un rol de base de datos, use las opciones ADD MEMBER
y DROP MEMBER
de la instrucción ALTER ROLE . Analytics Platform System (PDW) y Azure Synapse Analytics no admiten el uso de ALTER ROLE
. En su lugar, use los procedimientos sp_addrolemember y sp_droprolemember anteriores.
Existen dos tipos de roles en el nivel de base de datos: los roles fijos de base de datos que están predefinidos en la base de datos y los roles de base de datos definidos por el usuario que el usuario puede crear.
Los roles fijos de base de datos se definen en el nivel de base de datos y existen en cada una de ellas. Los miembros de los roles de base de datos db_owner pueden administrar la pertenencia a roles fijos de base de datos. También hay algunos roles de base de datos con fines especiales en la base de datos msdb
.
Puede agregar cualquier cuenta de base de datos y otros roles de SQL Server en roles a nivel de base de datos.
Sugerencia
No agregue roles de base de datos definidos por el usuario como miembros de los roles fijos. Esto podría habilitar un aumento de privilegios no deseado.
Los permisos de los roles de base de datos definidos por el usuario se pueden personalizar con las instrucciones GRANT, DENY y REVOKE. Para obtener más información, consulte Permisos (motor de base de datos).
Para una lista de todos los permisos, consulte el póster Permisos del motor de base de datos . No se pueden conceder permisos a nivel de servidor a los roles de base de datos. Los inicios de sesión y otras entidades de seguridad a nivel de servidor (como roles de servidor) no se pueden agregar a los roles de base de datos. Para la seguridad a nivel de servidor en SQL Server, use roles de servidor en su lugar. Los permisos a nivel de servidor no se pueden otorgar a través de roles en Azure SQL Database y Azure Synapse Analytics.
Roles fijos de base de datos
En la tabla siguiente se muestran los roles fijos de base de datos y sus funcionalidades. Estos roles existen en todas las bases de datos. A excepción del rol de base de datos público, no se pueden cambiar los permisos asignados a los roles fijos de base de datos.
Nombre del rol fijo de base de datos | Descripción |
---|---|
db_owner | Los miembros del rol fijo de base de datos db_owner pueden realizar todas las actividades de configuración y mantenimiento en la base de datos, y también pueden DROP la base de datos en SQL Server. (En SQL Database y Azure Synapse, algunas actividades de mantenimiento requieren permisos a nivel de servidor y no se pueden realizar por db_owners). |
db_securityadmin | Los miembros del rol fijo de base de datos db_securityadmin pueden modificar la pertenencia a roles únicamente para roles personalizados y administrar permisos. Los miembros de este rol pueden elevar potencialmente sus privilegios y se deben supervisar sus acciones. |
db_accessadmin | Los miembros del rol fijo de base de datos db_accessadmin pueden agregar o eliminar el acceso a la base de datos para inicios de sesión de Windows, grupos de Windows e inicios de sesión de SQL Server. |
db_backupoperator | Los miembros del rol fijo de base de datos db_backupoperator pueden crear copias de seguridad de la base de datos. |
db_ddladmin | Los miembros del rol fijo de base de datos db_ddladmin pueden ejecutar cualquier comando del lenguaje de definición de datos (DDL) en una base de datos. Los miembros de este rol pueden potencialmente aumentar sus privilegios manipulando código que puede ser ejecutado bajo altos privilegios y sus acciones se deben supervisar. |
db_datawriter | Los miembros del rol fijo de base de datos db_datawriter pueden agregar, eliminar o cambiar datos en todas las tablas de usuario. En la mayoría de los casos de uso, este rol se combina con la membresía db_datareader para permitir la lectura de los datos que se van a modificar. |
db_datareader | Los miembros del rol fijo de base de datos db_datareader pueden leer todos los datos de todas las tablas y vistas de usuario. Los objetos de usuario pueden existir en cualquier esquema, excepto sys e INFORMATION_SCHEMA . |
db_denydatawriter | Los miembros del rol fijo de base de datos db_denydatawriter no pueden agregar, modificar ni eliminar datos de tablas de usuario de una base de datos. |
db_denydatareader | Los miembros del rol fijo de base de datos db_denydatareader no pueden leer datos de las tablas y vistas de usuario dentro de una base de datos. |
No se pueden cambiar los permisos asignados a los roles fijos de base de datos. La ilustración siguiente muestra los permisos asignados a los roles fijos de base de datos:
Roles especiales para Azure SQL Database y Azure Synapse
Estos roles de base de datos solo existen en la base de datos master
virtual. Sus permisos están restringidos a las acciones realizadas en la base de datos master
. Solo los usuarios de base de datos en la base de datos master
se pueden agregar a estos roles. Los inicios de sesión no se pueden agregar a estos roles, pero los usuarios se pueden crear basados en inicios de sesión y, luego, esos usuarios se pueden agregar a los roles. Los usuarios de bases de datos independientes en la base de datos master
también se pueden agregar a estos roles. Sin embargo, los usuarios de la base de datos independiente que se agregaron al rol dbmanager en la base de datos master
no se pueden usar para crear bases de datos nuevas.
Nombre de rol | Descripción |
---|---|
dbmanager | Puede crear y eliminar bases de datos. Un miembro del rol dbmanager que crea una base de datos se convierte en el propietario de dicha base de datos, lo que permite que el usuario se conecte a ella como el usuario dbo. El usuario dbo tiene todos los permisos de base de datos en la base de datos. Los miembros del rol dbmanager no necesariamente tienen permiso para acceder a las bases de datos que no son de su propiedad. |
db_exporter | Los miembros del rol de base de datos fijo db_exporter pueden realizar todas las actividades de exportación de datos. Los permisos concedidos a través de este rol son CREATE TABLE , ALTER ANY SCHEMA , ALTER ANY EXTERNAL DATA SOURCE , ALTER ANY EXTERNAL FILE FORMAT .Se aplica a: grupos de SQL dedicados de Azure Synapse Analytics (anteriormente SQL DW) |
loginmanager | Puede crear y eliminar inicios de sesión en la base de datos master virtual. |
Nota:
La entidad de seguridad a nivel de servidor y el administrador de Microsoft Entra (si está configurado) tienen todos los permisos en SQL Database y Azure Synapse Analytics sin necesidad de ser miembros de ningún rol. Para obtener más información, consulte Autorización del acceso de base de datos a SQL Database, Instancia administrada de SQL y Azure Synapse Analytics.
Algunos roles de base de datos no se pueden aplicar a Azure SQL o Azure Synapse:
db_backupoperator no es aplicable en Azure SQL Database (no Azure SQL Managed Instance) y el grupo sin servidor Azure Synapse Analytics porque los comandos T-SQL de copia de seguridad y restauración no están disponibles.
db_datawriter y db_denydatawriter no se aplican a Azure Synapse Analytics sin servidor porque solo lee datos externos.
Roles en la base de datos msdb
La base de datos msdb
contiene los roles con fines especiales que se muestran en la tabla siguiente.
Nombre de rol msdb |
Descripción |
---|---|
db_ssisadmin db_ssisoperator db_ssisltduser |
Los miembros de estos roles de base de datos pueden administrar y usar SSIS. Las instancias de SQL Server que se actualizan desde una versión anterior pueden contener una versión anterior del rol que se nombró con Servicios de transformación de datos (DTS) en lugar de SSIS. Para obtener más información, vea Roles de Integration Services (servicio SSIS). |
dc_admin dc_operator dc_proxy |
Los miembros de estos roles de base de datos pueden administrar y utilizar el recopilador de datos. Para obtener más información, consulte Recopilación de datos. |
PolicyAdministratorRole | Los miembros del rol de base de datos db_ PolicyAdministratorRole pueden realizar todas las actividades de mantenimiento y configuración en las condiciones y directivas de Administración basada en directivas. Para obtener más información, vea Administrar servidores mediante administración basada en directivas. |
ServerGroupAdministratorRole ServerGroupReaderRole |
Los miembros de estos roles de base de datos pueden administrar y utilizar grupos de servidores registrados. |
dbm_monitor | Se crea en la base de datos msdb cuando se registra la primera base de datos en el Monitor de creación de reflejo de la base de datos. El rol dbm_monitor no tiene miembros hasta que un administrador del sistema asigna usuarios al rol. |
Los miembros de los roles db_ssisadmin y dc_admin quizás puedan elevar sus privilegios a sysadmin. Esta elevación de privilegio se puede producir porque estos roles pueden modificar los paquetes de Integration Services y los paquetes de Integration Services los puede ejecutar SQL Server utilizando el contexto de seguridad de sysadmin del Agente SQL Server . Para protegerse contra esta elevación de privilegio al ejecutar planes de mantenimiento, conjuntos de recopilación de datos y otros paquetes de servicios de integración, configure los trabajos del Agente SQL Server que ejecutan paquetes para utilizar una cuenta de proxy con privilegios limitados o agregar solo los miembros de sysadmin a los roles db_ssisadmin y dc_admin.
Trabajo con roles de nivel de base de datos
En la tabla siguiente se explican los comandos, las vistas y las funciones que se usan para trabajar con los roles de nivel de base de datos.
Característica | Tipo | Descripción |
---|---|---|
sp_helpdbfixedrole | Metadatos | Devuelve la lista de los roles fijos de base de datos. |
sp_dbfixedrolepermission | Metadatos | Muestra los permisos de un rol fijo de base de datos. |
sp_helprole | Metadatos | Devuelve información acerca de los roles de la base de datos actual. |
sp_helprolemember | Metadatos | Devuelve información acerca de los miembros de un rol de la base de datos actual. |
sys.database_role_members | Metadatos | Devuelve una fila por cada miembro de cada rol de base de datos. |
IS_MEMBER | Metadatos | Indica si el usuario actual es miembro del grupo de Microsoft Windows, del grupo de Microsoft Entra o del rol de base de datos de SQL Server especificados. |
CREATE ROLE | Get-Help | Crea un rol de base de datos nuevo en la base de datos actual. |
ALTER ROLE | Get-Help | Cambia el nombre o la pertenencia de un rol de base de datos. |
DROP ROLE | Get-Help | Quita un rol de la base de datos. |
sp_addrole | Get-Help | Crea un rol de base de datos nuevo en la base de datos actual. |
sp_droprole | Get-Help | Quita un rol de base de datos de la base de datos actual. |
sp_addrolemember | Get-Help | Agrega un usuario de base de datos, un rol de base de datos, un inicio de sesión de Windows o un grupo de Windows a un rol de base de datos en la base de datos actual. Todas las plataformas excepto Analytics Platform System (PDW) y Azure Synapse deben usar en ALTER ROLE su lugar. |
sp_droprolemember | Get-Help | Quita una cuenta de seguridad de un rol de SQL Server de la base de datos actual. Todas las plataformas excepto Analytics Platform System (PDW) y Azure Synapse deben usar en ALTER ROLE su lugar. |
GRANT | Permisos | Agrega el permiso a un rol. |
DENY | Permisos | Deniega un permiso a un rol. |
REVOKE | Permisos | Quita los permisos concedido o denegados anteriormente. |
Rol de base de datos público
Todos los usuarios de una base de datos pertenecen al rol de base de datos public s. Cuando a un usuario no se le han concedido ni se le han denegado permisos específicos sobre un objeto protegible, el usuario hereda los permisos concedidos al rol público en ese objeto. Los usuarios de base de datos no se pueden quitar del rol público.
Ejemplos
En los ejemplos de esta sección se muestra cómo trabajar con los roles en el nivel de base de datos.
A Adición de un usuario a un rol en el nivel de base de datos
En el siguiente ejemplo se agrega el usuario 'Ben' al rol en el nivel de base de datos fijo db_datareader
.
ALTER ROLE db_datareader ADD MEMBER Ben;
GO
B. Enumeración de todas las entidades de seguridad de base de datos que son miembros de un rol en el nivel de base de datos
La instrucción siguiente devuelve todos los miembros de cualquier rol de base de datos.
SELECT roles.principal_id AS RolePrincipalID,
roles.name AS RolePrincipalName,
database_role_members.member_principal_id AS MemberPrincipalID,
members.name AS MemberPrincipalName
FROM sys.database_role_members AS database_role_members
INNER JOIN sys.database_principals AS roles
ON database_role_members.role_principal_id = roles.principal_id
INNER JOIN sys.database_principals AS members
ON database_role_members.member_principal_id = members.principal_id;
GO