Мы настроили SQL Server и наше приложение таким образом, чтобы учетная запись SQL Server ... без каких-либо разрешений при доступе к базе данных с помощью любого инструмента, кроме нашего приложения. Это необходимо, потому что некоторые люди могут запустить доступ (или SQL Server Management Studio) и смогут манипулировать данными таким образом.sp_setapprole и создание пользователей/логинов
Итак, мы установили роль приложения и предоставили этой роли приложения необходимые разрешения. Все работает хорошо, пользователи не могут получить доступ к нашим таблицам, если они не используют наше приложение.
Теперь возникает проблема. В нашем приложении должно быть возможно создать дополнительные логины/пользователи или установить некоторых конкретных пользователей в качестве администраторов (только администраторы могут создавать связанные с пользователем материалы). Я не уверен на 100%, но в этом случае мне кажется, что пользователю нужна роль SecurityAdmin. Таким образом, у нас есть некоторый код в нашем приложении, которое выглядит следующим образом:
IF NOT EXISTS (SELECT name
FROM sys.server_principals
WHERE name = @LoginName)
BEGIN
SET @SQL = 'CREATE LOGIN [' + @LoginName + '] WITH PASSWORD = '''
+ @Password + ''', DEFAULT_DATABASE=[' + @DBNAME
+ '], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF';
EXECUTE(@SQL);
END
IF NOT EXISTS (SELECT name
FROM sys.database_principals
WHERE name = @LoginName)
BEGIN
SET @SQL = 'CREATE USER [' + @LoginName + '] FOR LOGIN ['
+ @LoginName + ']';
EXECUTE(@SQL);
END
IF EXISTS (SELECT name
FROM sys.server_principals
WHERE name = @LoginName)
BEGIN
EXEC sp_addsrvrolemember @LoginName, 'securityadmin'
END
Проблема заключается в том, конечно, что server_principals находится в основной базе данных, и нет никакого способа, я могу дать мой Application Роль этих разрешений. Есть ли способ обойти эту проблему или простой способ решить эту проблему?
Само по себе это не объясняет как выполнить задачи OP: как предоставить некоторым пользователям приложения больше прав в базе данных, чем другие. – RBarryYoung