如何授予 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 角色权限以创建和管理临时表的主要内容,如果未能解决你的问题,请参考以下文章

如何授予新创建的角色权限以使用 JDA 库加入新创建的语音聊天?

如何枚举授予 Oracle 角色的权限列表?

oracle管理权限和角色

oracle管理角色和权限

如何允许系统管理员创建角色?

Oracle:如何授予角色读取和创建视图权限?