Introducción a los permisos de los motores de bases de datosGetting Started with Database Engine Permissions

SE APLICA A: SíSQL Server SíAzure SQL Database SíAzure Synapse Analytics (SQL Data Warehouse) SíParallel Data Warehouse APPLIES TO: YesSQL Server YesAzure SQL Database YesAzure Synapse Analytics (SQL Data Warehouse) YesParallel Data Warehouse

Los permisos de Motor de base de datosDatabase Engine se administran en el nivel de servidor mediante inicios de sesión y roles de servidor, y en el nivel de base de datos mediante usuarios de base de datos y roles base de datos.Permissions in the Motor de base de datosDatabase Engine are managed at the server level through logins and server roles, and at the database level through database users and database roles. El modelo para SQL DatabaseSQL Database expone el mismo sistema en cada base de datos, pero los permisos de nivel de servidor no están disponibles.The model for SQL DatabaseSQL Database exposes the same system within each database, but the server level permissions are not available. En este tema se tratan algunos conceptos básicos de seguridad y, a continuación, se describe una implementación típica de los permisos.This topic reviews some basic security concepts and then describes a typical implementation of the permissions.

Entidades de seguridadSecurity Principals

"Entidad de seguridad" es el nombre oficial de las identidades que utilizan SQL ServerSQL Server y a las que se pueden conceder permisos para realizar acciones.Security principal is the official name of the identities that use SQL ServerSQL Server and that can be assigned permission to take actions. Suelen ser personas o grupos de personas, pero pueden ser otras entidades que finjan ser personas.They are usually people or groups of people, but can be other entities that pretend to be people. Las entidades de seguridad se pueden crear y administrar mediante el Transact-SQLTransact-SQL indicado o mediante SQL Server Management StudioSQL Server Management Studio.The security principals can be created and managed using the Transact-SQLTransact-SQL listed, or by using SQL Server Management StudioSQL Server Management Studio.

Inicios de sesiónLogins

Los inicios de sesión son cuentas de usuario individuales para iniciar sesión en Motor de base de datos de SQL ServerSQL Server Database Engine.Logins are individual user accounts for logging on to the Motor de base de datos de SQL ServerSQL Server Database Engine. SQL ServerSQL Server y SQL DatabaseSQL Database admiten inicios de sesión basados en la autenticación de Windows e inicios de sesión basados en la autenticación de SQL ServerSQL Server .and SQL DatabaseSQL Database support logins based on Windows authentication and logins based on SQL ServerSQL Server authentication. Para obtener más información acerca de los dos tipos de inicio de sesión, consulte Choose an Authentication Mode.For information about the two types of logins, see Choose an Authentication Mode.

Roles fijos de servidorFixed Server Roles

En SQL ServerSQL Server, los roles fijos de servidor son un conjunto de roles preconfigurados que proporcionan un grupo práctico de permisos de nivel de servidor.In SQL ServerSQL Server, fixed server roles are a set of pre-configured roles that provide convenient group of server-level permissions. Se pueden agregar inicios de sesión a los roles mediante la instrucción ALTER SERVER ROLE ... ADD MEMBER .Logins can be added to the roles using the ALTER SERVER ROLE ... ADD MEMBER statement. Para obtener más información, consulte ALTER SERVER ROLE (Transact-SQL).For more information, see ALTER SERVER ROLE (Transact-SQL). SQL DatabaseSQL Database no admite los roles fijos de servidor, pero tiene dos roles en la base de datos maestra (dbmanager y loginmanager) que actúan como roles de servidor.does not support the fixed server roles, but has two roles in the master database (dbmanager and loginmanager) that act like server roles.

Roles de servidor definidos por el usuarioUser-defined Server Roles

En SQL ServerSQL Server, puede crear sus propios roles de servidor y asignarles permisos de nivel de servidor.In SQL ServerSQL Server, you can create your own server roles and assign server-level permissions to them. Se pueden agregar inicios de sesión al servidor mediante la instrucción ALTER SERVER ROLE ... ADD MEMBER .Logins can be added to the server roles using the ALTER SERVER ROLE ... ADD MEMBER statement. Para obtener más información, consulte ALTER SERVER ROLE (Transact-SQL).For more information, see ALTER SERVER ROLE (Transact-SQL). SQL DatabaseSQL Database no admite los roles de servidor definidos por el usuario.does not support the user-defined server roles.

Usuarios de bases de datosDatabase Users

Para conceder acceso a una base de datos a los inicios de sesión, se crea un usuario de base de datos en una base de datos y se asigna ese usuario de base de datos al inicio de sesión.Logins are granted access to a database by creating a database user in a database and mapping that database user to login. Normalmente, el nombre de usuario de base de datos es el mismo que el nombre de inicio de sesión, aunque no tiene por qué ser así en todos los casos.Typically the database user name is the same as the login name, though it does not have to be the same. Cada usuario de base de datos se asigna a un inicio de sesión único.Each database user maps to a single login. Un inicio de sesión se puede asignar a un único usuario en una base de datos, pero se puede asignar como usuario de base de datos en distintas bases de datos.A login can be mapped to only one user in a database, but can be mapped as a database user in several different databases.

También se pueden crear usuarios de base de datos que no tengan el correspondiente inicio de sesión.Database users can also be created that do not have a corresponding login. Estos usuarios se denominan usuarios de base de datos independiente.These are called contained database users. MicrosoftMicrosoft recomienda el uso de los usuarios de base de datos independiente porque facilita el traslado de la base de datos a otro servidor.encourages the use of contained database users because it makes it easier to move your database to a different server. Igual que un inicio de sesión, un usuario de base de datos independiente puede utilizar tanto la autenticación de Windows como la autenticación de SQL ServerSQL Server .Like a login, a contained database user can use either Windows authentication or SQL ServerSQL Server authentication. Para obtener más información, vea Usuarios de base de datos independiente: hacer que la base de datos sea portátil.For more information, see Contained Database Users - Making Your Database Portable.

Hay 12 tipos de usuarios con ligeras diferencias en cuanto a cómo se autentican y a quién representan.There are 12 types of users with slight differences in how they authenticate, and who they represent. Para ver una lista de usuarios, consulte CREATE USER (Transact-SQL).To see a list of users, see CREATE USER (Transact-SQL).

Roles fijos de base de datosFixed Database Roles

Los roles fijos de base de datos son un conjunto de roles preconfigurados que proporcionan un práctico grupo de permisos de nivel de base de datos.Fixed database roles are a set of pre-configured roles that provide convenient group of database-level permissions. Se pueden agregar usuarios de base de datos y roles de base de datos definidos por el usuario a los roles fijos de base de datos mediante la instrucción ALTER ROLE ... ADD MEMBER.Database users and user-defined database roles can be added to the fixed database roles using the ALTER ROLE ... ADD MEMBER statement. Para obtener más información, vea ALTER ROLE (Transact-SQL).For more information, see ALTER ROLE (Transact-SQL).

Roles de base de datos definidos por el usuarioUser-defined Database Roles

Los usuarios con el permiso CREATE ROLE pueden crear nuevos roles de base de datos definidos por el usuario para representar grupos de usuarios con permisos comunes.Users with the CREATE ROLE permission can create new user-defined database roles to represent groups of users with common permissions. Normalmente, los permisos se conceden o deniegan a todo el rol, lo que simplifica la administración y supervisión de permisos.Typically permissions are granted or denied to the entire role, simplifying permissions management and monitoring. Se pueden agregar usuarios de base de datos a los roles de base de datos mediante la instrucción ALTER ROLE ... ADD MEMBER .Database users can be added to the database roles by using the ALTER ROLE ... ADD MEMBER statement. Para obtener más información, vea ALTER ROLE (Transact-SQL).For more information, see ALTER ROLE (Transact-SQL).

Otras entidades de seguridadOther principals

Otras entidades de seguridad que no se tratan aquí son los roles de aplicación y los inicios de sesión y usuarios basados en certificados o claves asimétricas.Additional security principals not discussed here include application roles, and logins and users based on certificates or asymmetric keys.

Para ver un gráfico que muestra las relaciones entre usuarios de Windows, grupos de Windows, inicios de sesión y usuarios de base de datos, consulte Create a Database User.For a graphic showing the relationships between Windows users, Windows groups, logins, and database users, see Create a Database User.

Escenario típicoTypical Scenario

En el ejemplo siguiente se muestra un método común y recomendado para la configuración de permisos.The following example represents a common and recommended method of configuring permissions.

En Active Directory o Azure Active Directory:In Active Directory or Azure Active Directory:

  1. Cree un usuario de Windows para cada persona.Create a Windows user for each person.

  2. Cree grupos de Windows que representen las unidades y las funciones de trabajo.Create Windows groups that represent the work units and the work functions.

  3. Agregue los usuarios de Windows a los grupos de Windows.Add the Windows users to the Windows groups.

Si la persona que se conecta lo va a hacer a diversas bases de datosIf the person connecting will be connecting to many databases

  1. Cree un inicio de sesión para los grupos de Windows.Create a login for the Windows groups. (Si usa la autenticación de SQL ServerSQL Server , omita los pasos de Active Directory y cree los inicios de sesión de la autenticación SQL ServerSQL Server aquí).(If using SQL ServerSQL Server authentication, skip the Active Directory steps, and create SQL ServerSQL Server authentication logins here.)

  2. En la base de datos de usuario, cree un usuario de base de datos para el inicio de sesión que representa los grupos de Windows.In the user database, create a database user for the login representing the Windows groups.

  3. En la base de datos de usuario, cree uno o varios roles de base de datos definidos por el usuario, cada uno para representar una función similar.In the user database, create one or more user-defined database roles, each representing a similar function. Por ejemplo, analista financiero y analista de ventas.For example financial analyst, and sales analyst.

  4. Agregue los usuarios de base de datos a uno o varios roles de base de datos definidos por el usuario.Add the database users to one or more user-defined database roles.

  5. Conceda permisos a los roles de base de datos definidos por el usuario.Grant permissions to the user-defined database roles.

Si la persona que se conecta lo va a hacer a una única base de datosIf the person connecting will be connecting to only one database

  1. Cree un inicio de sesión para los grupos de Windows.Create a login for the Windows groups. (Si usa la autenticación de SQL ServerSQL Server , omita los pasos de Active Directory y cree los inicios de sesión de la autenticación SQL ServerSQL Server aquí).(If using SQL ServerSQL Server authentication, skip the Active Directory steps, and create SQL ServerSQL Server authentication logins here.)

  2. En la base de datos de usuario, cree un usuario de base de datos independiente para el grupo de Windows.In the user database, create a contained database user for the Windows group. (Si usa la autenticación de SQL ServerSQL Server , omita los pasos de Active Directory y cree la autenticación de SQL ServerSQL Server del usuario de base de datos independiente aquí).(If using SQL ServerSQL Server authentication, skip the Active Directory steps, and create contained database user SQL ServerSQL Server authentication here.

  3. En la base de datos de usuario, cree uno o varios roles de base de datos definidos por el usuario, cada uno para representar una función similar.In the user database, create one or more user-defined database roles, each representing a similar function. Por ejemplo, analista financiero y analista de ventas.For example financial analyst, and sales analyst.

  4. Agregue los usuarios de base de datos a uno o varios roles de base de datos definidos por el usuario.Add the database users to one or more user-defined database roles.

  5. Conceda permisos a los roles de base de datos definidos por el usuario.Grant permissions to the user-defined database roles.

Normalmente, el resultado en este punto es que un usuario de Windows es miembro de un grupo de Windows.The typical result at this point, is that a Windows user is a member of a Windows group. El grupo de Windows tiene un inicio de sesión en SQL ServerSQL Server o SQL DatabaseSQL Database.The Windows group has a login in SQL ServerSQL Server or SQL DatabaseSQL Database. El inicio de sesión se asigna a una identidad de usuario en la base de datos de usuario.The login is mapped to a user identity in the user-database. El usuario es miembro de un rol de base de datos.The user is a member of a database role. Ahora debe agregar permisos al rol.Now you need to add permissions to the role.

Asignación de permisosAssigning Permissions

El formato de la mayoría de instrucciones de permiso es:Most permission statements have the format:

AUTHORIZATION  PERMISSION  ON  SECURABLE::NAME  TO  PRINCIPAL;  
  • AUTHORIZATION debe ser GRANT, REVOKE o DENY.AUTHORIZATION must be GRANT, REVOKE or DENY.

  • PERMISSION establece las acciones permitidas o prohibidas.The PERMISSION establishes what action is allowed or prohibited. SQL Server 2016 (13.x)SQL Server 2016 (13.x) puede especificar 230 permisos.can specify 230 permissions. SQL DatabaseSQL Database tiene menos permisos porque algunas acciones no son pertinentes en Azure.has fewer permissions because some actions are not relevant in Azure. Los permisos se muestran en el tema Permissions (Database Engine) (Permisos [motor de base de datos]) y en el gráfico al que se hace referencia más abajo.The permissions are listed in the topic Permissions (Database Engine) and in the chart referenced below.

  • ON SECURABLE::NAME es el tipo de elemento protegible (servidor, objeto de servidor, base de datos u objeto de base de datos) y su nombre.ON SECURABLE::NAME is the type of securable (server, server object, database, or database object) and its name. Algunos permisos no requieren ON SECURABLE::NAME porque este es inequívoco o bien no procede en el contexto.Some permissions do not require ON SECURABLE::NAME because it is unambiguous or inappropriate in the context. Por ejemplo, el permiso CREATE TABLE no requiere la cláusula ON SECURABLE::NAME.For example the CREATE TABLE permission doesn't require the ON SECURABLE::NAME clause. (Por ejemplo, GRANT CREATE TABLE TO Mary; permite a Mary crear tablas).(For example GRANT CREATE TABLE TO Mary; allows Mary to create tables.)

  • PRINCIPAL es la entidad de seguridad (inicio de sesión, usuario o rol) que recibe o pierde el permiso.PRINCIPAL is the security principal (login, user, or role) which receives or loses the permission. Conceda permisos a los roles siempre que sea posible.Grant permissions to roles whenever possible.

En la siguiente instrucción GRANT de ejemplo, se concede el permiso UPDATE de la tabla o vista Parts incluida en el esquema Production al rol denominado PartsTeam:The following example grant statement, grants the UPDATE permission on the Parts table or view which is contained in the Production schema to the role named PartsTeam:

GRANT UPDATE ON OBJECT::Production.Parts TO PartsTeam;  

Los permisos se conceden a las entidades de seguridad (inicios de sesión, usuarios y roles) mediante la instrucción GRANT .Permissions are granted to security principals (logins, users, and roles) by using the GRANT statement. Los permisos se deniegan explícitamente mediante el comando DENY .Permissions are explicitly denied by using the DENY command. Para eliminar un permiso concedido o denegado anteriormente, se usa la instrucción REVOKE .A previously granted or denied permission is removed by using the REVOKE statement. Los permisos son acumulativos, de modo que el usuario recibe todos los permisos concedidos al usuario, al inicio de sesión y a cualquier pertenencia a algún grupo. Sin embargo, las denegaciones de permisos invalidan todas las concesiones.Permissions are cumulative, with the user receiving all the permissions granted to the user, login, and any group memberships; however any permission denial overrides all grants.

Sugerencia

Un error común es intentar eliminar un elemento GRANT mediante DENY en lugar de REVOKE.A common mistake is to attempt to remove a GRANT by using DENY instead of REVOKE. Esto puede causar problemas cuando un usuario recibe permisos de varios orígenes, lo que es bastante común.This can cause problems when a user receives permissions from multiple sources; which is quite common. En el ejemplo siguiente se muestra la entidad de seguridad.The following example demonstrates the principal.

El grupo Ventas recibe permisos SELECT en la tabla OrderStatus mediante la instrucción GRANT SELECT ON OBJECT::OrderStatus TO Sales;.The Sales group receives SELECT permissions on the OrderStatus table through the statement GRANT SELECT ON OBJECT::OrderStatus TO Sales;. El usuario Ted es miembro del rol Ventas.User Ted is a member of the Sales role. También se ha concedido a Ted el permiso SELECT para la tabla OrderStatus bajo su propio nombre de usuario mediante la instrucción GRANT SELECT ON OBJECT::OrderStatus TO Ted;.Ted has also been granted SELECT permission to the OrderStatus table under his own user name through the statement GRANT SELECT ON OBJECT::OrderStatus TO Ted;. Supongamos que el administrador desea quitar el elemento GRANT al rol Ventas.Presume the administer wishes to remove the GRANT to the Sales role.

  • Si el administrador ejecuta correctamente REVOKE SELECT ON OBJECT::OrderStatus TO Sales;, Ted conservará el acceso SELECT a la tabla OrderStatus mediante su instrucción GRANT individual.If the administrator correctly executes REVOKE SELECT ON OBJECT::OrderStatus TO Sales;, then Ted will retain SELECT access to the OrderStatus table through his individual GRANT statement.

  • Si el administrador no ejecuta correctamente DENY SELECT ON OBJECT::OrderStatus TO Sales; , a Ted, como miembro del rol de ventas, le será denegado el permiso SELECT porque DENY a Ventas invalida su GRANTindividual.If the administrator incorrectly executes DENY SELECT ON OBJECT::OrderStatus TO Sales; then Ted, as a member of the Sales role, will be denied the SELECT permission because the DENY to Sales overrides his individual GRANT.

Nota

Los permisos se pueden configurar mediante Management StudioManagement Studio.Permissions can be configured using Management StudioManagement Studio. Busque el elemento protegible en el Explorador de objetos, haga clic con el botón derecho en el elemento protegible y, luego, haga clic en Propiedades.Find the securable in Object Explorer, right-click the securable, and then click Properties. Seleccione la página Permisos .Select the Permissions page. Para obtener ayuda sobre el uso de la página de permisos, consulte Permissions or Securables Page.For help on using the permission page, see Permissions or Securables Page.

Jerarquía de permisosPermission Hierarchy

Los permisos tienen una jerarquía de elementos principales y secundarios.Permissions have a parent/child hierarchy. Es decir, si se concede el permiso SELECT en una base de datos, dicho permiso incluirá el permiso SELECT en todos los esquemas (secundarios) de la base de datos.That is, if you grant SELECT permission on a database, that permission includes SELECT permission on all (child) schemas in the database. Si se concede el permiso SELECT en un esquema, incluirá el permiso SELECT en todas las tablas y vistas (secundarias) del esquema.If you grant SELECT permission on a schema, it includes SELECT permission on all the (child) tables and views in the schema. Los permisos son transitivos, es decir, si se concede el permiso SELECT en una base de datos, incluirá el permiso SELECT en todos los esquemas (secundarios) y todas las tablas y vistas (descendientes de elementos secundarios).The permissions are transitive; that is, if you grant SELECT permission on a database, it includes SELECT permission on all (child) schemas, and all (grandchild) tables and views.

Los permisos también tienen permisos de cobertura.Permissions also have covering permissions. El permiso CONTROL en un objeto normalmente concede todos los otros permisos del objeto.The CONTROL permission on an object, normally gives you all other permissions on the object.

Puesto que tanto la jerarquía de elementos principales y secundarios como la jerarquía de cobertura pueden actuar en el mismo permiso, el sistema de permisos puede resultar complicado.Because both the parent/child hierarchy and the covering hierarchy can act on the same permission, the permission system can get complicated. Por ejemplo, consideremos una tabla (Región) de en un esquema (Clientes) en una base de datos (SalesDB).For example, let's take a table (Region), in a schema (Customers), in a database (SalesDB).

  • CONTROL en la tabla Región incluye todos los otros permisos de la tabla Región, incluidos los permisos ALTER, SELECT, INSERT, UPDATE, DELETEy algunos otros permisos.CONTROL permission on table Region includes all the other permissions on the table Region, including ALTER, SELECT, INSERT, UPDATE, DELETE, and some other permissions.

  • SELECT en el esquema Clientes que posee la tabla Región incluye el permiso SELECT en la tabla Región.SELECT on the Customers schema that owns the Region table includes the SELECT permission on the Region table.

Así que el permiso SELECT en la tabla Región se puede obtener mediante cualquiera de estas seis instrucciones:So SELECT permission on the Region table can be achieved through any of these six statements:

GRANT SELECT ON OBJECT::Region TO Ted;   
  
GRANT CONTROL ON OBJECT::Region TO Ted;   
  
GRANT SELECT ON SCHEMA::Customers TO Ted;   
  
GRANT CONTROL ON SCHEMA::Customers TO Ted;   
  
GRANT SELECT ON DATABASE::SalesDB TO Ted;   
  
GRANT CONTROL ON DATABASE::SalesDB TO Ted;  

Conceder el permiso mínimoGrant the Least Permission

El primer permiso mencionado antes (GRANT SELECT ON OBJECT::Region TO Ted;) es el más pormenorizado, es decir, esa instrucción es el permiso mínimo posible que concede SELECT.The first permission listed above (GRANT SELECT ON OBJECT::Region TO Ted;) is the most granular, that is, that statement is the least permission possible that grants the SELECT. No incluye permisos para los objetos subordinados.No permissions to subordinate objects come with it. Se recomienda conceder siempre el permiso mínimo posible, pero, por el contrario, concederlo en los niveles superiores para simplificar el sistema de concesiones.It's a good principal to always grant the least permission possible, but (contradicting that) grant at higher levels in order to simplify the granting system. Por tanto, si Ted necesita permisos para todo el esquema, conceda SELECT una vez en el nivel de esquema, en lugar de conceder SELECT en el nivel de tabla o vista varias veces.So if Ted needs permissions to the entire schema, grant SELECT once at the schema level, instead of granting SELECT at the table or view level many times. El diseño de la base de datos ejerce un impacto importante sobre el éxito que puede tener esta estrategia.The design of the database has a great deal of impact on how successful this strategy can be. Esta estrategia funcionará mejor si la base de datos está diseñada de forma que los objetos que necesiten permisos idénticos se incluyan en un único esquema.This strategy will work best when your database is designed so that objects needing identical permissions are included in a single schema.

Lista de permisosList of Permissions

SQL Server 2016 (13.x)SQL Server 2016 (13.x) tiene 230 permisos.has 230 permissions. SQL Server 2014 (12.x)SQL Server 2014 (12.x) tiene 219 permisos.has 219 permissions. SQL Server 2012 (11.x)SQL Server 2012 (11.x) tiene 214 permisos.has 214 permissions. SQL Server 2008 R2SQL Server 2008 R2 tiene 195 permisos.has 195 permissions. SQL DatabaseSQL Database, Microsoft Azure Synapse Analytics (anteriormente, SQL Data Warehouse)Microsoft Azure Synapse Analytics (formerly SQL Data Warehouse)y Sistema de la plataforma de análisisAnalytics Platform System tienen menos permisos porque solo exponen una parte del motor de base de datos, aunque cada uno tiene permisos que no son aplicables a SQL ServerSQL Server., Microsoft Azure Synapse Analytics (anteriormente, SQL Data Warehouse)Microsoft Azure Synapse Analytics (formerly SQL Data Warehouse), and Sistema de la plataforma de análisisAnalytics Platform System have fewer permissions because they expose only a portion of the database engine, though each have some permissions that do not apply to SQL ServerSQL Server.

El gráfico siguiente muestra los permisos y las relaciones entre ellos.The following graphic shows the permissions and their relationships to each other. Algunos de los permisos de nivel superior (como CONTROL SERVER) se muestran varias veces.Some of the higher level permissions (such as CONTROL SERVER) are listed many times. En este artículo, el póster es demasiado pequeño para leerlo.In this article, the poster is far too small to read. Haga clic en la imagen para descargar el póster de los permisos de los motores de bases de datos en formato pdf.Click the image to download the Database Engine Permissions Poster in pdf format.

Permisos de los motores de bases de datosDatabase Engine Permissions

Para ver un gráfico que muestra las relaciones entre las entidades de seguridad de Motor de base de datosDatabase Engine y los objetos de servidor y base de datos, consulte Permissions Hierarchy (Database Engine) (Jerarquía de permisos [motor de base de datos]).For a graphic showing the relationships among the Motor de base de datosDatabase Engine principals and server and database objects, see Permissions Hierarchy (Database Engine).

Permisos y roles fijos de servidor y de base de datosPermissions vs. Fixed Server and Fixed Database Roles

Los permisos de los roles fijos de servidor y roles fijos de base de datos son similares a los permisos granulares, pero no son exactamente iguales.The permissions of the fixed server roles and fixed database roles are similar but not exactly the same as the granular permissions. Por ejemplo, los miembros del rol fijo de servidor sysadmin tienen todos los permisos en la instancia de SQL ServerSQL Server, igual que los inicios de sesión con el permiso CONTROL SERVER .For example, members of the sysadmin fixed server role have all permissions on the instance of SQL ServerSQL Server, as do logins with the CONTROL SERVER permission. Pero la concesión del permiso CONTROL SERVER no convierte un inicio de sesión en miembro del rol fijo de servidor sysadmin, y agregar un inicio de sesión al rol fijo de servidor sysadmin no concede explícitamente el permiso CONTROL SERVER al inicio de sesión.But granting the CONTROL SERVER permission does not make a login a member of the sysadmin fixed server role, and adding a login to the sysadmin fixed server role does not explicitly grant the login the CONTROL SERVER permission. A veces, un procedimiento almacenado comprobará los permisos comprobando el rol fijo sin comprobar el permiso granular.Sometimes a stored procedure will check permissions by checking the fixed role and not checking the granular permission. Por ejemplo, para desasociar una base de datos es necesaria la pertenencia al rol fijo de base de datos db_owner .For example detaching a database requires membership in the db_owner fixed database role. El permiso equivalente CONTROL DATABASE no es suficiente.The equivalent CONTROL DATABASE permission is not enough. Estos dos sistemas operan en paralelo, pero rara vez interactúan entre sí.These two systems operate in parallel but rarely interact with each other. Microsoft recomienda utilizar el sistema de permisos granulares más reciente en lugar de los roles fijos siempre que sea posible.Microsoft recommends using the newer, granular permission system instead of the fixed roles whenever possible.

Supervisión de permisosMonitoring Permissions

Las vistas siguientes devuelven información de seguridad.The following views return security information.

  • Los inicios de sesión y los roles de servidor definidos por el usuario en un servidor se pueden examinar con la vista sys.server_principals .The logins and user-defined server roles on a server can be examined by using the sys.server_principals view. Esta vista no está disponible en SQL DatabaseSQL Database.This view is not available in SQL DatabaseSQL Database.

  • Los usuarios y los roles definidos por el usuario en una base de datos se pueden examinar con la vista sys.database_principals .The users and user-defined roles in a database can be examined by using the sys.database_principals view.

  • Los permisos concedidos a los inicios de sesión y los roles fijos de servidor definidos por el usuario se pueden examinar con la vista sys.server_permissions .The permissions granted to logins and user-defined fixed server roles can be examined by using the sys.server_permissions view. Esta vista no está disponible en SQL DatabaseSQL Database.This view is not available in SQL DatabaseSQL Database.

  • Los permisos concedidos a los usuarios y los roles fijos de base de datos definidos por el usuario se pueden examinar con la vista sys.database_permissions .The permissions granted to users and user-defined fixed database roles can be examined by using the sys.database_permissions view.

  • La pertenencia al rol de base de datos se puede examinar con la vista sys. sys.database_role_members .Database role membership can be examined by using the sys. sys.database_role_members view.

  • La pertenencia al rol de servidor se puede examinar con la vista sys.server_role_members .Server role membership can be examined by using the sys.server_role_members view. Esta vista no está disponible en SQL DatabaseSQL Database.This view is not available in SQL DatabaseSQL Database.

  • Para obtener vistas adicionales relacionadas con la seguridad, vea Vistas de catálogo de seguridad (Transact-SQL) .For additional security related views, see Security Catalog Views (Transact-SQL) .

Instrucciones Transact-SQL útilesUseful Transact-SQL Statements

Las instrucciones siguientes devuelven información útil acerca de los permisos.The following statements return useful information about permissions.

Para devolver los permisos explícitos concedidos o denegados en una base de datos (SQL ServerSQL Server y SQL DatabaseSQL Database), ejecute la instrucción siguiente en la base de datos.To return the explicit permissions granted or denied in a database ( SQL ServerSQL Server and SQL DatabaseSQL Database), execute the following statement in the database.

SELECT   
    perms.state_desc AS State,   
    permission_name AS [Permission],   
    obj.name AS [on Object],   
    dPrinc.name AS [to User Name]  
FROM sys.database_permissions AS perms  
JOIN sys.database_principals AS dPrinc  
    ON perms.grantee_principal_id = dPrinc.principal_id  
JOIN sys.objects AS obj  
    ON perms.major_id = obj.object_id;  

Para devolver los miembros de los roles de servidor (solo SQL ServerSQL Server), ejecute la instrucción siguiente.To return the members of the server roles ( SQL ServerSQL Server only), execute the following statement.

SELECT sRole.name AS [Server Role Name] , sPrinc.name AS [Members]  
FROM sys.server_role_members AS sRo  
JOIN sys.server_principals AS sPrinc  
    ON sRo.member_principal_id = sPrinc.principal_id  
JOIN sys.server_principals AS sRole  
    ON sRo.role_principal_id = sRole.principal_id;  

Para devolver los miembros de los roles de base de datos (SQL ServerSQL Server y SQL DatabaseSQL Database), ejecute la instrucción siguiente en la base de datos.To return the members of the database roles ( SQL ServerSQL Server and SQL DatabaseSQL Database), execute the following statement in the database.

SELECT dRole.name AS [Database Role Name], dPrinc.name AS [Members]  
FROM sys.database_role_members AS dRo  
JOIN sys.database_principals AS dPrinc  
    ON dRo.member_principal_id = dPrinc.principal_id  
JOIN sys.database_principals AS dRole  
    ON dRo.role_principal_id = dRole.principal_id;  

Pasos siguientesNext Steps

Para obtener más temas para comenzar, consulte:For more topics to get you started, see:

Consulte tambiénSee Also

Centro de seguridad para el motor de base de datos SQL Server y la base de datos SQL Azure Security Center for SQL Server Database Engine and Azure SQL Database
Funciones de seguridad (Transact-SQL) Security Functions (Transact-SQL)
Funciones y vistas de administración dinámica relacionadas con la seguridad (Transact-SQL) Security-Related Dynamic Management Views and Functions (Transact-SQL)
Vistas de catálogo de seguridad (Transact-SQL) Security Catalog Views (Transact-SQL)
sys.fn_builtin_permissions (Transact-SQL) sys.fn_builtin_permissions (Transact-SQL)
Determinar los permisos efectivos del motor de base de datosDetermining Effective Database Engine Permissions