Ищите сценарий, который будет записывать все разрешения на уровне базы данных (включая xp_cmdshell и учетную запись прокси sql) - PullRequest
1 голос
/ 01 декабря 2009

Мне нужна хранимая процедура или скрипт, который будет записывать все разрешения на уровне базы данных, включая разрешения для xp_cmdshell для любых объектов, а также разрешения для учетной записи прокси-сервера sql.

Спасибо!

Ответы [ 2 ]

1 голос
/ 05 декабря 2009

Ваша проблема заключается в том, что xp_cmdshell - это разрешение основной базы данных, поэтому, если вы не просматриваете базы данных на сервере, вы не сможете делать то, что хотите. Если вы пытаетесь предоставить все разрешения для базы данных прокси-учетной записи, вам просто нужно поместить эту учетную запись в роль базы данных db_owner, и она получит эти права через членство в роли. Xp_cmdshell - это отдельное явное предоставление в master, и его необходимо включить через sp_configure, и его следует использовать для унаследованной интеграции, его не следует использовать для новых разработок. По крайней мере, если вы используете xp_cmdshell, учетная запись прокси должна быть настроена по примеру Tibor здесь:

http://sqlblog.com/blogs/tibor_karaszi/archive/2007/08/23/xp-cmdshell-and-permissions.aspx

Разрешения для конкретного пользователя могут быть записаны в сценарии путем запроса DMV, аналогичного следующему:

SELECT
permission.state_desc,
permission.permission_name,
obj.name
FROM
sys.all_objects AS obj
INNER JOIN sys.database_permissions AS permission ON permission.major_id=obj.object_id AND permission.minor_id=0 AND permission.class=1
INNER JOIN sys.database_principals AS grantor_principal ON grantor_principal.principal_id = permission.grantor_principal_id
INNER JOIN sys.database_principals AS grantee_principal ON grantee_principal.principal_id = permission.grantee_principal_id
WHERE (grantee_principal.name=N'JohnDoe')
0 голосов
/ 07 декабря 2009

Я также нашел другой скрипт:

SELECT
    dp.name db_principal_name,
    p.permission_name,
    COALESCE(o.type_desc,p.class_desc)
     + CASE WHEN o.type_desc IS NOT NULL
             AND minor_id > 0
            THEN '-COLUMN'
            ELSE '' END AS object_type,
    CASE p.class_desc WHEN 'SCHEMA' 
                      THEN schema_name(major_id)
                      WHEN 'OBJECT_OR_COLUMN' 
                      THEN CASE WHEN minor_id = 0 
                                THEN object_name(major_id)
                                ELSE (SELECT object_name(object_id) 
                                             + '.'+ name
                                      FROM sys.columns
                                      WHERE object_id = p.major_id
                                        AND column_id = p.minor_id) END
                      ELSE 'other' END AS object_name,
    p.state_desc AS grant_state,
    CONVERT(VARCHAR(MAX),p.state_desc) 
     + ' ' + CONVERT(VARCHAR(MAX),p.permission_name) 
     + ' ON ' + CASE WHEN minor_id = 0 
                     THEN object_name(major_id)
                     ELSE (SELECT object_name(object_id) + '.'+ name
                           FROM sys.columns
                           WHERE object_id = p.major_id
                             AND column_id = p.minor_id) END
     + ' TO [' + CONVERT(VARCHAR(MAX),dp.NAME) 
     + ']' Collate SQL_Latin1_General_CP1_CI_AS 
FROM sys.database_permissions p
INNER JOIN sys.database_principals dp 
        ON p.grantee_principal_id = dp.principal_id
LEFT OUTER JOIN sys.objects o 
        ON o.object_id = p.major_id
--WHERE dp.name <> 'public'
ORDER BY dp.name, object_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...