如何确定需要为新创建的登录分配哪些权限?

Rau*_*DBA 3 stored-procedures permissions role functions sql-server-2014

我们有 4 个包含不同程序和功能的数据库。到目前为止,实际应用程序只能使用 sa 帐户访问数据库,现在我想将应用程序更改为使用 sa 帐户以外的其他帐户。为此,我需要创建一个新的 SQL 登录名并为该登录名分配某些权限。有没有类似脚本的方法来确定我需要为新创建的用户分配什么权限?

Jon*_*ite 5

@Ross的链接肯定会帮助您确定语法和所有选项,但需要更多指导:

有两个数据库角色可能对您有用,它们是 db_datawriter 和 db_datareader。它们中的两个可能会处理您的大部分 CRUD(创建、读取、更新、删除)操作。

ALTER ROLE db_datareader ADD MEMBER <user>
ALTER ROLE db_datawriter ADD MEMBER <user>
Run Code Online (Sandbox Code Playgroud)

如果您愿意/需要,您可以获得比这更细粒度的信息。例如,允许插入,但不允许更新或删除表。

你在标签中提到了存储过程,所以这些可能有点棘手。一种更简单的方法是在架构上授予执行权限。但您也可以一次授予他们一份。

--all stored procedures in schema dbo
GRANT EXECUTE ON SCHEMA::dbo TO <user>

--specific stored procedure
GRANT EXECUTE ON dbo.uspDoMyThing TO <user>
Run Code Online (Sandbox Code Playgroud)

最后,如果您允许应用程序执行 TRUNCATE,那么除了 db_datawriter 之外,它们实际上还需要 ALTER TABLE 权限。

GRANT ALTER TABLE ON dbo.MyTable TO <user>
Run Code Online (Sandbox Code Playgroud)

恭喜您正确控制了服务器的安全性。即使您最终必须在数据库中授予 db_owner 权限,这也比 sysadmin 好得多。

一些最后的注意事项:

  • 显式拒绝权限优先于授予。
  • 为架构分配权限将授予该架构中所有对象的权限(即使它们是稍后创建的)。
  • 我将从所有存储过程的 db_datareader、db_datawriter 和 EXECUTE 开始,这将使您获得最快的运行速度,之后所需的维护最少。它可能比必要的范围更广,但可以造成的损害最小化。