Как обращаться с пользователями и входами в проект Visual Studio Database Project?

Я создал базу данных в SQL Server 2008 R2 и использую Visual Studio 2010 Ultimate для создания проекта базы данных для нее.

Я создал проект SQL Server и проект Database для представления моей среды на основе этого

Ответ 1

Раньше нам приходилось с этим возиться, и в итоге мы использовали идею Джейми Томпсона о создании сценариев после развертывания для обработки разрешений на основе переменной, содержащей имя среды/конфигурации. Вы можете найти (в архиве) статью здесь: https://web.archive.org/web/20190222004817/http://sqlblog.com/blogs/jamie_thomson/archive/2010/07/21/a-strategy-for-managing-security-for-different-environments-using-the-database-development-tools-in-visual-studio-2010.aspx

Примечание: ссылка Джейми, очевидно, мертва. Я написал кое-что основанное на этом здесь: http://schottsql.com/2013/05/14/ssdt-setting-different-permissions-per-environment/

Я также написал скрипт для обработки сценариев разрешений:

SELECT
state_desc + ' ' + permission_name +
' on ['+ ss.name + '].[' + so.name + ']
to [' + sdpr.name + ']'
COLLATE LATIN1_General_CI_AS as [Permissions T-SQL]
FROM SYS.DATABASE_PERMISSIONS AS sdp
JOIN sys.objects AS so
     ON sdp.major_id = so.OBJECT_ID
JOIN SYS.SCHEMAS AS ss
     ON so.SCHEMA_ID = ss.SCHEMA_ID
JOIN SYS.DATABASE_PRINCIPALS AS sdpr
     ON sdp.grantee_principal_id = sdpr.principal_id

UNION

SELECT
state_desc + ' ' + permission_name +
' on Schema::['+ ss.name + ']
to [' + sdpr.name + ']'
COLLATE LATIN1_General_CI_AS as [Permissions T-SQL]
FROM SYS.DATABASE_PERMISSIONS AS sdp
JOIN SYS.SCHEMAS AS ss
     ON sdp.major_id = ss.SCHEMA_ID
     AND sdp.class_desc = 'Schema'
JOIN SYS.DATABASE_PRINCIPALS AS sdpr
     ON sdp.grantee_principal_id = sdpr.principal_id
order by [Permissions T-SQL]
GO

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