Как вы проверяете права пользователей, которые позволяют изменять таблицы на SQL Server? - PullRequest
0 голосов
/ 29 марта 2012

Мне нужно проверить пользователя базы данных, чтобы узнать, есть ли у этого пользователя права изменять таблицы в базе данных.Мне нужны два пользователя: один, который может изменить структуру таблицы базы данных, а другой, имеющий роли db_reader и db_writer.Я нашел этот запрос в Интернете, показывающий все разрешения для текущего пользователя:

SELECT * FROM fn_my_permissions (NULL, 'DATABASE')

Вот результаты для readonly пользователя с ролями db_datareader и db_datawriter:

entity_name     subentity_name      permission_name
-----------     --------------      ---------------
database                            CONNECT
database                            SELECT
database                            INSERT
database                            UPDATE
database                            DELETE

Вот результаты для sa:

Возвраты:

entity_name     subentity_name      permission_name
-----------     --------------      ---------------
database                            CREATE TABLE
database                            CREATE VIEW
database                            CREATE PROCEDURE
database                            CREATE FUNCTION
database                            CREATE RULE
database                            CREATE DEFAULT
database                            BACKUP DATABASE
database                            BACKUP LOG
database                            CREATE DATABASE
database                            CREATE TYPE
database                            CREATE ASSEMBLY
database                            CREATE XML SCHEMA COLLECTION
database                            CREATE SCHEMA
database                            CREATE SYNONYM
database                            CREATE AGGREGATE
database                            CREATE ROLE
database                            CREATE MESSAGE TYPE
database                            CREATE SERVICE
database                            CREATE CONTRACT
database                            CREATE REMOTE SERVICE BINDING
database                            CREATE ROUTE
database                            CREATE QUEUE
database                            CREATE SYMMETRIC KEY
database                            CREATE ASYMMETRIC KEY
database                            CREATE FULLTEXT CATALOG
database                            CREATE CERTIFICATE
database                            CREATE DATABASE DDL EVENT NOTIFICATION
database                            CONNECT
database                            CONNECT REPLICATION
database                            CHECKPOINT
database                            SUBSCRIBE QUERY NOTIFICATIONS
database                            AUTHENTICATE
database                            SHOWPLAN
database                            ALTER ANY USER
database                            ALTER ANY ROLE
database                            ALTER ANY APPLICATION ROLE
database                            ALTER ANY SCHEMA
database                            ALTER ANY ASSEMBLY
database                            ALTER ANY DATASPACE
database                            ALTER ANY MESSAGE TYPE
database                            ALTER ANY CONTRACT
database                            ALTER ANY SERVICE
database                            ALTER ANY REMOTE SERVICE BINDING
database                            ALTER ANY ROUTE
database                            ALTER ANY FULLTEXT CATALOG
database                            ALTER ANY SYMMETRIC KEY
database                            ALTER ANY ASYMMETRIC KEY
database                            ALTER ANY CERTIFICATE
database                            SELECT
database                            INSERT
database                            UPDATE
database                            DELETE
database                            REFERENCES
database                            EXECUTE
database                            ALTER ANY DATABASE DDL TRIGGER
database                            ALTER ANY DATABASE EVENT NOTIFICATION
database                            ALTER ANY DATABASE AUDIT
database                            VIEW DATABASE STATE
database                            VIEW DEFINITION
database                            TAKE OWNERSHIP
database                            ALTER
database                            CONTROL

Какой запрос я бы использовал, чтобы определить, что пользователь только для чтения и, следовательно, не может продолжать пересылку?

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

По определению членство в db_datawriter и db_datareader означает, что ваш пользователь может выполнять операции CRUD. Вы действительно спрашиваете, как вы можете определить, является ли ваш пользователь участником этих ролей?

Вы можете запросить, являются ли пользователи членами роли:

sp_helprolemember 'db_datawriter'

Если вас действительно интересует подробный запрос уровня разрешений, почему? Это всегда будет так, если пользователь является членом db_datawriter и db_datareader.

0 голосов
/ 04 июня 2015

Я думаю, что команда, которую вы на самом деле ищете, - это HAS_PERMS_BY_NAME, которая «оценивает действующее разрешение текущего пользователя для защищаемого объекта». fn_my_permissions "Возвращает список разрешений, фактически предоставленных принципалу для защищаемого."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...