Permisos de SQL Server para crear, restaurar, eliminar solo algunas bases de datos

17

En MS SQL Server 2008 R2, necesito tener un usuario que pueda crear, restaurar, DBCC CHECKDB y luego descartar bases de datos. Pero no debe poder acceder o eliminar bases de datos especificadas en el servidor (razones de seguridad). ¿Es posible esta configuración?

Cicik
fuente
Puede obtener algunas sugerencias aquí: toadworld.com/platforms/sql-server/w/wiki/…
dezso el

Respuestas:

27

Sí, es posible a través de un par de permisos.

Primero, para crear una base de datos : deberá otorgar el permiso de nivel de servidor Create Any Database. Este permiso hace exactamente lo que parece: el poder de crear una base de datos. Tenga en cuenta que esto no otorga la función fija de servidor de dbcreator al inicio de sesión, ya que esa función fija de servidor otorga permisos de alteración / eliminación en cualquier base de datos. Create Any Databasepermite que el inicio de sesión solo tenga ese poder sobre las bases de datos que poseen. Esto también le dará la capacidad de restaurar.

(Por lo tanto, al hacer "Crear cualquier base de datos" SOLAMENTE , está dando la posibilidad de crear una nueva base de datos, pero evitando la posibilidad de eliminar o alterar CUALQUIER base de datos que obtendría al usar la función fija de servidor dbcreator)

Para otorgar este permiso "Crear cualquier base de datos":

use [master]
GO
GRANT CREATE ANY DATABASE TO [LoginName]
GO

Para la capacidad de ejecutar DBCC CHECKDBy descartar bases de datos , la función fija de base de datos db_owner es suficiente. Esto le otorga todo lo que está solicitando. Tenga en cuenta: también está otorgando a este usuario la capacidad de seleccionar, eliminar, truncar, actualizar e insertar con db_owner. Me gusta pensar en esto como sysadminen una base de datos.

Solo aplicará este permiso a la base de datos en la que desea tener esta capacidad. Esto le permitirá controlar en qué bases de datos el usuario puede soltar, restaurar o checkdb. Cualquier base de datos en la que no le haya dado al usuario estos permisos estará a salvo de que este usuario realice estas acciones en

Para hacer esto, primero debe asignar el inicio de sesión a un usuario de la base de datos:

USE [DatabaseName]
GO
CREATE USER [UserName] FOR LOGIN [LoginName] 
GO

Y luego agregue ese usuario a la db_ownerfunción (Funciona en SQL Server 2012 y en adelante):

ALTER ROLE [db_owner] ADD MEMBER [frank]
GO

Para SQL Server 2008, tendría que usar el procedimiento almacenado del sistema para agregar un miembro de rol como comentador a continuación:

EXEC sp_addrolemember 'db_owner', 'frank';

También puede hacer todo esto a través de la GUI. La información de inicio de sesión que haría a través de la carpeta de seguridad en SSMS en el nivel de instancia: haga clic derecho en el inicio de sesión -> Propiedades -> Protegibles. Para el nivel de la base de datos, lo haría a través de la carpeta de seguridad en el nivel de la base de datos: haga clic con el botón derecho y seleccione nuevo usuario -> elija el inicio de sesión que desea usar de su lista de inicios de sesión del servidor / asigne un nombre al usuario de la base de datos -> vaya a la pestaña de membresía para seleccionar la membresía del rol.

El sistema de ayuda de SQL Server, Books Online, también es un recurso fantástico para la mayoría de las preguntas sobre permisos, si determina que necesita asignar otros permisos. Simplemente haga una búsqueda del comando T-SQL al que desea otorgar permisos y generalmente hay una sección Permisos para ese comando en el artículo que le permite saber qué permisos se requieren para realizar esta acción. Puede ver el artículo de DBCC CHECKDB para ver un ejemplo: aproximadamente 7/8 del artículo se encuentra en la sección de permisos.

Mike Walsh
fuente
3
Solo me gustaría agregar que ALTER ROLE [db_owner] ADD MEMBER [frank]solo funciona desde SQL Server 2012. Si está en SQL Server 2008, debe ir con el SP: EXEC sp_addrolemember 'db_owner', 'frank';(Ref aquí y aquí )
superjos