Published on

February 12, 2012

Comprendiendo los permisos de usuario en SQL Server

Cuando se trata de administrar los permisos de usuario en SQL Server, es importante asegurarse de que se otorgue el nivel adecuado de acceso a las personas o grupos correctos. En este artículo, exploraremos un script que puede ayudarte a identificar los permisos otorgados a un usuario para cada base de datos en línea en SQL Server.

El script utiliza la declaración EXECUTE AS, que te permite suplantar a un usuario y ejecutar declaraciones en su nombre. Sin embargo, es importante tener en cuenta que necesitarás los permisos necesarios para suplantar al usuario en cuestión. Además, el script utiliza la función fn_my_permissions, que proporciona información sobre los permisos otorgados al usuario actual. Ten en cuenta que la funcionalidad de esta función puede ser limitada.

Echemos un vistazo más de cerca al script:


-- Declarar variables
DECLARE @intMinLoop INT, @intMaxLoop INT, @strSQL VARCHAR(1000), @strDatabasename VARCHAR(100), @strUser VARCHAR(1000)

-- Crear variable de tabla
DECLARE @tmpDBtable TABLE (AutoID INT IDENTITY(1,1), Databasename VARCHAR(500))

-- Establecer el usuario
SET @strUser = 'dominio\usuario' --o para un usuario de SQL
-- SET @strUser = 'usuario'

-- Insertar los nombres de las bases de datos
INSERT INTO @tmpDBTable
SELECT NAME FROM master.dbo.sysdatabases WHERE DATABASEPROPERTYEX(name, 'Status') = 'ONLINE'

-- Configurar control de bucle
SELECT @intMinLoop = MIN(autoID), @intMaxLoop = MAX(autoID) FROM @tmpDBTable

-- Obtener permisos
WHILE @intMinLoop <= @intMaxLoop
BEGIN
    SELECT @strDatabasename = Databasename FROM @tmpDBTable WHERE @intMinLoop = AutoID
    SELECT @strSQL = 'USE [' + @strDatabasename + ']; EXECUTE AS USER = ''' + @strUser + '''; SELECT ''' + @strDatabasename + ''' as DatabaseName,* FROM fn_my_permissions(NULL,''Database''); REVERT;'

    BEGIN TRY
        EXEC (@strSQL)
    END TRY
    BEGIN CATCH
        SELECT @@ERROR, ERROR_MESSAGE()
    END CATCH

    SET @intMinLoop = @intMinLoop + 1
END

Este script recupera los nombres de todas las bases de datos en línea y recorre cada base de datos para ejecutar una serie de declaraciones. Utiliza la declaración EXECUTE AS USER para suplantar al usuario especificado y luego recupera los permisos otorgados a ese usuario utilizando la función fn_my_permissions. Finalmente, vuelve al contexto del usuario original.

Al ejecutar este script, puedes identificar fácilmente los permisos otorgados a un usuario para cada base de datos, lo que te permite asegurarte de que se proporcione el nivel adecuado de acceso. Esto puede ser particularmente útil para identificar cualquier problema de seguridad causado por la concesión de permisos a personas en lugar de grupos.

Recuerda, es importante revisar y administrar regularmente los permisos de usuario para mantener un entorno seguro y eficiente de SQL Server.

¡Gracias por leer! Si encontraste útil este artículo, asegúrate de visitar nuestro blog para obtener más recursos de SQL Server.

Descargo de responsabilidad: El código y la información proporcionados en este artículo se proporcionan “tal cual” sin ninguna garantía. Puedes modificar y republicar el código siempre y cuando se dé el crédito adecuado. Se requiere permiso previo antes de publicar este código en un blog.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.