Existen situaciones en las que necesitas conceder permiso SELECT a un usuario específico y limitar ese acceso a un objeto específico, como una tabla, en SQL Server. Esto se puede lograr siguiendo los siguientes pasos:
- Crea un inicio de sesión para el usuario:
CREATE LOGIN [TestUser01] WITH PASSWORD = 'contraseña';
- Crea un objeto de usuario y asígnalo al inicio de sesión:
USE AdventureWorks2008R2;
CREATE USER [TestUser01] FOR LOGIN [TestUser01];
- Establece el permiso SELECT en la tabla específica:
GRANT SELECT ON [HumanResources].[Employee] TO [TestUser01];
Puedes restringir aún más el acceso a nivel de columna estableciendo permisos a nivel de columna según sea necesario.
Para verificar si se ha concedido el permiso SELECT al usuario, puedes utilizar la función HAS_PERMS_BY_NAME en SQL Server:
SELECT HAS_PERMS_BY_NAME('AdventureWorks2008R2.HumanResources.Employee', 'OBJECT', 'SELECT') AS SELECT_PERM,
name AS TABLE_NAME,
type_desc,
schema_id
FROM sys.tables;
La función HAS_PERMS_BY_NAME devuelve verdadero (1) o falso (0) para indicar si se ha concedido el permiso o no.
La ventaja de utilizar la función HAS_PERMS_BY_NAME es que es accesible para el rol Público, lo que significa que los usuarios con niveles de acceso mínimos pueden ejecutar una consulta que contenga la función. Además, si eres un administrador y deseas probar un usuario recién modificado, puedes suplantar a ese usuario utilizando la instrucción EXECUTE AS USER:
EXECUTE AS USER = 'TestUser01';
SELECT HAS_PERMS_BY_NAME('AdventureWorks2008R2.HumanResources.Employee', 'OBJECT', 'SELECT') AS SELECT_PERM,
name AS TABLE_NAME,
type_desc,
schema_id
FROM sys.tables;
REVERT;
Esto te permite verificar que el usuario tenga los permisos necesarios.
Siguiendo estos pasos, puedes conceder permiso SELECT a un usuario específico y limitar su acceso a un objeto particular en SQL Server.