[master]上的GRANTs传播给其他DB吗?

时间:2009-04-16 15:24:20

标签: sql sql-server sql-server-2005 scripting permissions

好的,我正在尝试在另一个SQL Server 2005实例上创建一个“空”版本的数据库。为此,我使用Scripting向导创建一个创建所有表,视图,SP的大脚本等,添加一些用户,并为他们授予权限。现在,在脚本的权限部分,我有(除其他外)

use [master]
GO
GRANT CREATE VIEW to [myUser]
GO
...
use [prodDb]
GO
GRANT REFERENCES on [tblMyTable] to [myUser]
GO
...

请记住,这是向导生成的脚本。我想弄清楚的是,“使用master ... GRANT CREATE VIEW”是否允许myUser在prodDb中创建视图?这是我的理解 - 我说“myUser可以在这个实例上的任何数据库中创建视图” - 但是当我尝试允许myUser在prodDb中创建视图时,我认为我收到权限错误。当我在SQL Server Manager中查看prodDb的权限时,权限是正确的,但我正在执行生成的脚本的目标系统没有SQL Server Manager,我不知道如何检查每个用户的权限在命令行的给定对象上(显然,当我尝试行使这些权限时的错误是一个很大的提示)。

这是脚本向导中的错误吗?我是否应该取消主级别的权限并仅在每个数据库级别授予它们?如果它有所不同,这适用于永远不会联网的独立系统上的本地应用程序。

ETA:好的,那么脚本向导为什么不为prodDb编写正确的GRANT语句呢?我的意思是,如果我在prodDb上查看myUser的当前权限,他们可以创建视图。但是,如果我从命令行在一个新的SQL Server实例上运行该脚本,则myUser无法在prodDb上创建VIEW。我可以手动解决这个问题,但每次重新运行脚本向导时都必须记住这一点非常恼人。

2 个答案:

答案 0 :(得分:3)

我的理解是对Master的更改不会传播到其他数据库,它只是系统范围对象的持有基础,例如用户,系统存储过程和存在的其他数据库列表。

模型的更改将传播到更改后创建的新数据库,但不是现有的数据库。

答案 1 :(得分:1)

“idforstackoverflow”完全正确:

  • Master可以说是“系统”数据库
  • 另一方面,“Model”是新数据库的模板。对模型的更改将在创建时将传播到新数据库 - 现有数据库不受这些更改的影响

马克