¿Cómo asigno un acceso de seguridad de grupo de Active Directory completo en SQL Server 2008?


40

Me gustaría utilizar la seguridad integrada con mi aplicación interna que está en un dominio. Desafortunadamente, nunca he podido hacer que esto funcione bien. Me gustaría asignar a un grupo completo de Exchange (Active Directory) un rol en SQL Server para el acceso de lectura / escritura a ciertas tablas. De esa manera no tendría que crear un operador cada vez que se contrata a alguien o eliminar un operador cada vez que se despide a alguien. es posible? ¿Qué pasos tomaría para hacer esto?

Respuestas:


48
  • Establezca el grupo AD como inicio de sesión. Y "inicio de sesión" significa el inicio de sesión a nivel del servidor, no el concepto AD de usuario / inicio de sesión. En SQL Server, este es un principal de nivel de servidor
  • Cree un usuario asignado. Realmente no debería permitir a un usuario directamente en las tablas. Y "usuario" significa usuario de la base de datos, no el concepto AD del usuario: en SQL Server, esto es un "nivel de base de datos principal"
  • Agregar usuario al rol (también un "nivel principal de base de datos")
  • Otorgar permisos a los roles en las tablas (una tabla o proceso, etc. es un "asegurable")

Script de muestra

USE master;
GO
CREATE LOGIN [MYDOMAIN\APPLICATION SUPPORT] FROM WINDOWS;
GO
USE mydb;
GO
CREATE USER [MYDOMAIN\APPLICATION SUPPORT] FROM LOGIN [MYDOMAIN\APPLICATION SUPPORT];
GO
CREATE ROLE rSupport;
GO
EXEC sp_addrolemember 'rSupport', 'MYDOMAIN\APPLICATION SUPPORT';
GO
GRANT SELECT, INSERT,UPDATE, etc ON Mytable TO rSupport;
GO

sp_addrolememberestá en desuso a partir de SQL Server 2012, donde ALTER ROLEdebería usarse en su lugar.


3
Sería útil explicar por qué debería asignar permisos a roles en lugar de usuarios de SQL (en este caso, grupos de AD).
Drew Chapin

¿Quizás quiere decir "crear usuario [...] para iniciar sesión", en lugar de "desde iniciar sesión"?
Agostino

CREAR USUARIO ... PARA INICIAR SESIÓN ...; y CREAR USUARIO ... DESDE INICIAR SESIÓN ...; ambos funcionan para mí (MSSQL2016). ¿No está seguro si hay alguna diferencia?
Ingeniero invertido


4

Otorgar los permisos dentro de SQL Server a un grupo de AD es relativamente sencillo. Se puede hacer a través de T-SQL o Management Studio.

Por ejemplo, si tiene un grupo de AD llamado MYDOMAIN\APPLICATION SUPPORT, crearía el inicio de sesión en el nivel del servidor y luego usaría asignaciones a bases de datos individuales para otorgar permisos ligeramente más granulares, como el lector de datos.

Idealmente, todo el acceso a la aplicación debe ser a través de procedimientos almacenados *, por lo que solo se requieren permisos de ejecución en esos procedimientos almacenados en esa base de datos.

* Desde el punto de vista de la seguridad, para permitir que un usuario en particular vea algunos datos específicos, puede crear un procedimiento y otorgarle al usuario permiso para ejecutar ese procedimiento, y nada más. Permitir que el usuario realice consultas directamente significaría otorgar un permiso de selección en todas las tablas involucradas. También es más fácil trabajar con procedimientos y más fácil de depurar.

Los procedimientos almacenados resumen el acceso a la tabla y limitan el acceso. Para los tipos de DBA, es como "déjame ver todas tus variables de instancia: no quiero usar métodos, captadores o establecedores".


3

De marc_s respondiendo "Cómo agregar un grupo de usuarios de Active Directory como inicio de sesión en SQL Server" :

En SQL Server Management Studio, vaya Object Explorer > (your server) > Security > Loginsy haga clic con el botón derecho New Login:

ingrese la descripción de la imagen aquí

Luego, en el cuadro de diálogo que aparece, seleccione los tipos de objetos que desea ver ( Groupsestá deshabilitado de forma predeterminada, ¡compruébelo!) Y elija la ubicación donde desea buscar sus objetos (por ejemplo, usar Entire Directory) y luego encuentre su grupo de AD .

ingrese la descripción de la imagen aquí

Ahora tiene un inicio de sesión de SQL Server regular, al igual que cuando crea uno para un solo usuario de AD. Dele a ese nuevo inicio de sesión los permisos en las bases de datos que necesita, ¡y listo!

Cualquier miembro de ese grupo de AD ahora puede iniciar sesión en SQL Server y usar su base de datos.


2
Vincular a esa respuesta SO probablemente sea útil, pero no está agregando nada nuevo a la publicación, ¿verdad? Podrías haber publicado el enlace como un comentario.
Andriy M

2
La respuesta tiene una buena captura de pantalla para verificar Grupos en Tipo de objeto, ya que eso era lo que me faltaba cuando intentaba hacer esto. Un enlace no lo muestra de una manera tan útil en mi opinión. Solo trato de ayudar a la siguiente persona ...
Incluso Mien

¿Qué quieres decir? Por lo general, hay un enlace para seguirlo, y todos los que sigan el enlace verán la bonita captura de pantalla de la que estás hablando, así como todo lo demás que hayas vuelto a publicar aquí. Sin embargo, no voy a discutir, solo para hacerle saber que mi opinión no ha cambiado: un enlace (en un comentario) funcionaría igual de bien.
Andriy M

44
Mi opinión tampoco ha cambiado. Un enlace en un comentario no transmite la misma información que una imagen real en una página web. "Muestra, no digas".
Incluso Mien

1

Si el usuario es miembro de un DOMAIN \ SecurityGroup que tiene autorización de Sysadmin en SQL, se usará al acceder a las bases de datos. De lo contrario, debe ver qué DOMINIO \ Grupo (s) de seguridad han otorgado autoridad en cada base de datos. Si el usuario es miembro de 2 SecurityGroups, con SecGroupA con autoridad de selección y SecGroupB con autoridad de inserción, el usuario puede seleccionar e insertar.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.