数据库“tempdb”中的 CREATE TABLE 权限被拒绝
Posted
技术标签:
【中文标题】数据库“tempdb”中的 CREATE TABLE 权限被拒绝【英文标题】:CREATE TABLE permission denied in database 'tempdb' 【发布时间】:2011-09-27 15:49:49 【问题描述】:我第一次在我的系统上安装了 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]
谢谢 拉朱
【问题讨论】:
【参考方案1】:我进入数据库,安全,用户,右击用户,属性。 成员资格,已检查 db_owner。
【讨论】:
这是一个更好的答案,因为我正在寻找比系统管理员少的角色(其他人在其他问题上的建议)。我有 dbcreator,但我忘记了 db_owner。 完美!会员资格中有很多选择来控制访问。谢谢!【参考方案2】:我最初的猜测是您在此服务器上没有 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 行,则表示您没有此数据库的 CREATE 权限。请联系您的 DBA 为 tempDB 授予 db_ddladmin。然而,正如 Andomar 所指出的,临时表是在预先附加 # 时在 tempDB 中自动创建的。
【讨论】:
亲爱的 Ram,非常感谢您的回复。我在我的系统上运行你的命令。正如你所说,它返回 o 行。这意味着没有权限。 我找到了这样的解决方案。实际上我使用的是 Windows vista,所以我通过右键单击该图标以管理员身份启动 SQL SEVER MANAGEMENT STUDIO EXPRESS。所以效果很好。【参考方案3】: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 角色还不够。
【讨论】:
【参考方案4】:您正尝试在tempdb
中创建一个永久表。这很不寻常,只要 SQL Server 服务重新启动,tempdb 就会完全消失。
创建临时表的正常方式是:
create table #TempTable (...
#
使其成为本地(特定于连接)临时表。全局临时表以##
开头。以这种方式创建临时表不需要特殊权限。
【讨论】:
【参考方案5】:我也遇到过这个问题。搜索它,大多数答案都是关于 db_owner 的,在 Security 菜单项中也检查过,但没有显示。在搜索时,我去了this 博客。 Ivan Dimitrov 的回答给了我一点提示。我的创建表查询是:
CREATE TABLE [dbo].[Album](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](150) NULL,
[Description] [nvarchar](500) NULL,
[TrackCount] [int] NULL,
[ReleaseYear] [int] NULL,
[Distributor] [nvarchar](500) NULL,
[ImageUrl] [nvarchar](max) NULL,
[CreatedDate] [datetime] NULL,
CONSTRAINT [PK_Album] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
我从查询中删除了 [dbo]. 然后运行它,成功执行。也许这不是一个完整的解决方案,但我设法以某种方式使用它。
【讨论】:
【参考方案6】:我不确定这个答案是否会有所帮助,但我遇到了类似的问题,这就是我解决它的方法。我遇到的问题是由于我的“创建表”默认为 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'
希望这篇文章对你有帮助!
【讨论】:
以上是关于数据库“tempdb”中的 CREATE TABLE 权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章