数据库'tempdb'中的CREATE TABLE权限被拒绝

时间:2011-07-03 14:47:20

标签: sql-server create-table

我第一次在我的系统上安装SQL Server Management Studio Express和Visual Studio 2005。现在我尝试使用下面的脚本创建表。但是,如果我执行一次,我将面临像

这样的错误
  

CREATE TABLE权限被拒绝   数据库'tempdb'。

为什么呢?任何人都可以帮我解决这个问题吗?

USE [tempdb]
GO

SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Employee]
([FirstName] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
 [LastName] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]

由于 拉朱

5 个答案:

答案 0 :(得分:17)

我进入数据库,安全性,用户,右键单击用户,属性。 成员资格,检查db_owner。

答案 1 :(得分:11)

我最初的猜测是你在这台服务器上没有CREATE表权限。你可以在下面运行这些查询吗?


-- get login first 
select suser_name() 
--or 
SELECT SYSTEM_USER

-- Now get the permissions assigned to you by the server administrator 
use tempDB 
GO 

;with getPermissions as ( SELECT * FROM fn_my_permissions (NULL, 'DATABASE') ) 
select permission_name from getPermissions 
where permission_name like 'create%' 
GO

如果permission_name列返回0行,则表示您对此DB没有CREATE权限。联系您的DBA以为tempDB授予db_ddladmin。然而,正如Andomar所指出的,临时表是在预先附加#时在tempDB中自动创建的。

答案 2 :(得分:10)

Use tempdb
GO
Create User MyUserName For Login MyUserName with Default_Schema= [dbo];
go
use tempdb
go
EXEC sp_addrolemember 'db_ddladmin', N'MyUserName'
go

您需要db_ddladmin角色才能为目标用户创建新表。所以db_datawriter角色是不够的。

答案 3 :(得分:9)

您正试图在tempdb中创建一个永久表。这很不寻常,只要SQL Server服务重新启动,tempdb就会完全消失。

创建临时表的常规方法是:

create table #TempTable (...

#使其成为本地(特定于连接)的临时表。全局临时表以##开头。以这种方式创建临时表不需要特殊权限。

答案 4 :(得分:0)

我不确定这个答案是否会有所帮助,但是我遇到了类似的问题,这就是我解决的方法。我遇到的问题是由于我的“创建表”默认为tempdb而需要指定数据库名称。正如其他人所述,我与数据库访问操作员进行了核对,以确保我具有创建表权限。由于我已经拥有必要的权限,因此我提出了以下解决方案。

以下内容返回了tempdb错误:

driver={SQL Server};server=YOUR_SERVER_NAME;trusted_connection=true

一旦包含了数据库名称,代码就可以正常工作。这是对我有用的代码:

driver={SQL Server};server=YOUR_SERVER_NAME;database=YOUR_DATABASE_NAME;trusted_connection=true'

我希望这篇文章对您有所帮助!