web-dev-qa-db-ja.com

データベース 'tempdb'でCREATE TABLE権限が拒否されました

初めてシステムにSQL Server Management Studio ExpressとVisual Studio 2005をインストールしました。現在、以下のスクリプトを使用してテーブルを作成しようとしています。しかし、一度実行すると、次のようなエラーが発生します

データベース 'tempdb'でCREATE TABLE権限が拒否されました。

それはなぜですか?誰でもこれを解決する方法を手伝ってくれる?

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]

ありがとうRaju

17
Raju

私の最初の推測では、このサーバー上にCREATE TABLE権限がないと思います。以下の一連のクエリを実行できますか?


-- 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権限がないことを意味します。 tempDBにdb_ddladminを付与するには、DBAに連絡してください。ただし、Andomarが指摘したように、一時テーブルは、#を前に付加するとtempDBに自動的に作成されます。

12
Ram

私はデータベース、セキュリティ、ユーザーに行き、ユーザー、プロパティを右クリックしました。メンバーシップ、db_ownerを確認しました。

19
Phillip Senn
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ロールでは十分ではありません。

10
ModChowdhury

tempdbに永続テーブルを作成しようとしています。これはかなり珍しいことです。tempdbは、SQL Serverサービスが再起動されるたびに完全に消去されます。

一時テーブルを作成する通常の方法は次のとおりです。

create table #TempTable (...

#は、ローカル(接続固有)の一時テーブルにします。グローバル一時テーブルは##で始まります。この方法で一時テーブルを作成するために特別な権限は必要ありません。

9
Andomar

私もこの問題に直面しました。それを検索したところ、ほとんどの答えはdb_ownerであり、セキュリティメニュー項目でも確認されましたが、表示されませんでした。検索中に 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]。をクエリから削除して実行し、正常に実行しました。多分それは完全な解決策ではないかもしれませんが、どういうわけかそれを扱うことができました。

1
Harry .Naeem

この回答が役立つかどうかはわかりませんが、同様の問題が発生したため、この方法で解決しました。私が経験していた問題は、「テーブルの作成」のデフォルトがtempdbであり、データベース名を指定する必要があったためです。他の人が述べたように、私は自分のDBアクセス演算子を調べて、テーブル作成権限があることを確認しました。私はすでに必要な権限を持っているので、以下の解決策を思いつきました。

次は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'

この投稿がお役に立てば幸いです。

0
YimYames