好的,我正在尝试在另一个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。我可以手动解决这个问题,但每次重新运行脚本向导时都必须记住这一点非常恼人。
答案 0 :(得分:3)
我的理解是对Master的更改不会传播到其他数据库,它只是系统范围对象的持有基础,例如用户,系统存储过程和存在的其他数据库列表。
模型的更改将传播到更改后创建的新数据库,但不是现有的数据库。
答案 1 :(得分:1)
“idforstackoverflow”完全正确:
马克