我有一个供应商,他在我的一个SQL Server 2012实例上安装了应用程序数据库。他告诉我,应用程序使用的SQL Auth帐户需要数据库数据读取器、数据写入器、数据库所有者和系统管理员。这对我来说毫无意义,因为系统管理员不需要其他角色。安装后,我删除了sysadmin,该帐户具有数据读取器和写入器。应用程序已停止工作。
因此,我正在寻找一些技巧和想法,以找出应用程序用户所需的最低权限。我看到数据库有存储过程,但没有任何函数、类型和程序集,所以我只想创建一个具有所有必需权限的角色。DB所有者会比sysadmin更好。我可以接受。
这取决于应用程序需要做什么。如果你的应用程序只读取数据,那么数据读取器角色。如果它对数据库进行读写操作,那么读写器都会很好。请注意,写入数据只包括插入和更新,而不包括修改或更改。在大多数情况下,您可以分配一系列角色,而不提供对命令(如截断或删除表(的登录访问权限——很明显,为什么拥有神的应用程序是个坏主意。
以下是您可以分配的所有可能角色的列表,以及每个角色的用途。希望了解应用程序的作用将帮助您更流畅地分配这些角色。
预定义的数据库角色
您可能需要创建自己的数据库,但您可以访问几个预定义的数据库角色:
- db_owner:成员具有完全访问权限
- db_accessadmin:成员可以管理Windows组和SQL Server登录
- db_datareader:成员可以读取所有数据
- db_datawriter:成员可以添加、删除或修改表中的数据
- db_ddladmin:成员可以运行动态链接库(DLL(语句
- db_securityadmin:成员可以修改角色成员身份并管理权限
- db_bckupoperator:成员可以备份数据库
- db_denydatareader:成员无法查看数据库中的数据
- db_denydatawriter:成员不能更改或删除表或视图中的数据
固定角色
固定服务器角色在服务器范围内应用,并且有几个预定义的服务器角色:
- SysAdmin:任何成员都可以在服务器上执行任何操作
- ServerAdmin:任何成员都可以在服务器上设置配置选项
- SetupAdmin:任何成员都可以管理链接的服务器以及SQL Server启动选项和任务
- 安全管理员:任何成员都可以管理服务器安全
- ProcessAdmin:任何成员都可以终止在SQL Server上运行的进程
- DbCreator:任何成员都可以创建、更改、删除和恢复数据库
- DiskAdmin:任何成员都可以管理SQL Server磁盘文件
- BulkAdmin:任何成员都可以运行大容量插入命令
您可以创建一个数据库角色来执行存储过程。当您授予特定数据库的登录权限时,它甚至会显示在UI中:
-- Create a db_executor role
CREATE ROLE db_executor
-- Grant execute rights to the new role
GRANT EXECUTE TO db_executor