Published on

April 4, 2012

Предоставление разрешения SELECT пользователю в SQL Server

Иногда возникают ситуации, когда вам необходимо предоставить разрешение SELECT определенному пользователю и ограничить его доступ к конкретному объекту, такому как таблица, в SQL Server. Это можно сделать, следуя следующим шагам:

  1. Создайте логин для пользователя:
CREATE LOGIN [TestUser01] WITH PASSWORD = 'пароль';
  1. Создайте объект пользователя и сопоставьте его с логином:
USE AdventureWorks2008R2;
CREATE USER [TestUser01] FOR LOGIN [TestUser01];
  1. Установите разрешение SELECT на конкретную таблицу:
GRANT SELECT ON [HumanResources].[Employee] TO [TestUser01];

Вы также можете ограничить доступ на уровне столбцов, устанавливая необходимые разрешения на уровне столбцов.

Чтобы проверить, предоставлено ли разрешение SELECT пользователю, вы можете использовать функцию HAS_PERMS_BY_NAME в 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;

Функция HAS_PERMS_BY_NAME возвращает true (1) или false (0), указывая, предоставлено ли разрешение или нет.

Преимущество использования функции HAS_PERMS_BY_NAME заключается в том, что она доступна роли Public, что означает, что пользователи с минимальным уровнем доступа могут выполнять запросы, содержащие эту функцию. Кроме того, если вы являетесь администратором и хотите протестировать вновь измененного пользователя, вы можете войти в его учетную запись с помощью оператора 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;

Это позволяет вам проверить, имеет ли пользователь необходимые разрешения.

Следуя этим шагам, вы можете предоставить разрешение SELECT конкретному пользователю и ограничить его доступ к определенному объекту в SQL Server.

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.