如何授予 SQL 角色权限以创建和管理临时表
Posted
技术标签:
【中文标题】如何授予 SQL 角色权限以创建和管理临时表【英文标题】:How to GRANT permissions to a SQL role to create and manage temp tables 【发布时间】:2011-01-18 20:29:32 【问题描述】:我想授予 SQL 角色创建临时表 #foo 的权限并授予对该表执行任何操作的权限(SELECT、INSERT 和 DELETE)。如果没有创建表#foo 怎么可能(属于该角色的用户将创建并管理它)?
谢谢
注意:如果可能,该解决方案应适用于 SQL 2008 和 SQL Azure。
【问题讨论】:
AFIK 所有登录都拥有create
#temp 表的权限,然后对它们执行CRUD。
【参考方案1】:
你不能:
当创建表的会话结束并且所有其他任务都停止引用它们时,全局临时表会自动删除。任务和表之间的关联仅在单个 Transact-SQL 语句的生命周期内维护。这意味着在创建会话结束时主动引用表的最后一个 Transact-SQL 语句完成后,将删除全局临时表。 link text
【讨论】:
【参考方案2】:我不确定 Azure,但是 ...
如果您在 tempdb 中显式创建表,它会在会话中持续存在,但会在服务器重新启动时被清除。
create table tempdb..authors (au_id char(11))
如果您创建一个##TempTable,它是全局可见的,但它也以创建者的会话结束。
【讨论】:
【参考方案3】:显然,使用AUTHORIZATION dbo
创建的用户一旦连接到数据库,就已经有权创建和管理临时表。只有当该用户需要访问数据库中的其他表时,才需要明确授予他权限。
【讨论】:
以上是关于如何授予 SQL 角色权限以创建和管理临时表的主要内容,如果未能解决你的问题,请参考以下文章