Sql server 在SQL Server中仅授予数据访问权限

Sql server 在SQL Server中仅授予数据访问权限,sql-server,privileges,Sql Server,Privileges,我希望能够创建一个SQL登录名(或角色),该登录名将能够: 读取数据 写入数据 并且将无法更改模式的任何内容(更改表、列、键等)。 我知道有一种方法可以通过脚本实现这一点(游标+设置拒绝/授予登录到每个数据库的权限) 这并没有减少它,因为每次将数据库添加到服务器时都必须重复。在以下情况下,我希望权限至少应用于新创建的数据库: 数据库是手动创建的 数据库从.bak还原为新数据库 从bacpac导入数据库 因为这将仅在开发模式中使用-黑客/变通方法也是可以接受的。将具有所需权限的用户添加到模

我希望能够创建一个SQL登录名(或角色),该登录名将能够:

  • 读取数据
  • 写入数据
并且将无法更改模式的任何内容(更改表、列、键等)。 我知道有一种方法可以通过脚本实现这一点(游标+设置拒绝/授予登录到每个数据库的权限)

这并没有减少它,因为每次将数据库添加到服务器时都必须重复。在以下情况下,我希望权限至少应用于新创建的数据库:

  • 数据库是手动创建的
  • 数据库从.bak还原为新数据库
  • 从bacpac导入数据库

因为这将仅在开发模式中使用-黑客/变通方法也是可以接受的。

将具有所需权限的用户添加到
模型
数据库将确保将其添加到该实例上所有新创建的数据库中。您需要使用脚本将用户添加到现有数据库以及迁移到实例的任何数据库(例如,通过备份和还原)。您可以找到有关
模型
数据库的更多信息。

db_datareader,db_datawriterThanks,我还发现这些是我需要的角色,但是,更重要的是如何在服务器上创建数据库的所有情况下自动将它们应用于给定用户(通过创建新数据库、将bak还原为新数据库或通过新的bacpac导入)。了解模型数据库非常有用,这似乎可以解决大多数情况,但不是所有情况(如果我创建新数据库,它看起来会起作用,但如果我从备份/bacpac还原新数据库,则不会起作用).如果是这种情况,并且为了答案的完整性,是否可以编写脚本来解决任何数据库创建问题(通过备份还原为新数据库或bacpac导入)。也许我可以在那里写一个触发器,这将解决所有情况?模型数据库不会影响还原的数据库。Pinal Dave有一个脚本,在这种情况下可能对您有用-它为服务器上尚未包含该用法的所有数据库添加一个用户:您可以将此脚本添加为还原过程中的一个步骤,或者创建SQL Agent作业,它定期运行脚本以在没有用户的情况下检查数据库。