web-dev-qa-db-de.com

CREATE TABLE-Berechtigung in Datenbank 'tempdb' verweigert

Zum ersten Mal habe ich SQL Server Management Studio Express und Visual Studio 2005 auf meinem System installiert. Jetzt versuche ich, eine Tabelle mit dem folgenden Skript zu erstellen. Aber wenn ich einmal exekutiere, stoße ich auf Fehler 

Die CREATE TABLE-Berechtigung wurde in .__ verweigert. Datenbank 'Tempdb'.

Warum es? Kann mir jemand helfen, wie ich das lösen kann?

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]

Danke Raju

15
Raju

Meine erste Vermutung ist, dass Sie auf diesem Server keine CREATE-Tabellenrechte haben. Können Sie bitte die folgenden Abfragen ausführen?


-- 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

Wenn die Spalte permission_name 0 Zeilen zurückgibt, bedeutet dies, dass Sie keine CREATE-Berechtigung für diese Datenbank haben. Wenden Sie sich an Ihren DBA, um db_ddladmin für die TempDB zu gewähren. Wie Andomar jedoch bemerkt, werden die temporären Tabellen automatisch in der temporären Datenbank erstellt, wenn sie mit # ..__ angehängt werden.

11
Ram

Ich ging in die Datenbank, Sicherheit, Benutzer, klicken Sie mit der rechten Maustaste auf den Benutzer, Eigenschaften .. _. Mitgliedschaft, überprüft Db_owner.

17
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

Sie benötigen die Rolle db_ddladmin, damit der vorgesehene Benutzer eine neue Tabelle erstellen kann. db_datawriter könnte also nicht ausreichen. 

10
ModChowdhury

Sie versuchen, eine permanente Tabelle in tempdb zu erstellen. Das ist ziemlich ungewöhnlich. Tempdb wird bei jedem Neustart des SQL Server-Dienstes vollständig gelöscht.

Normalerweise erstellen Sie eine temporäre Tabelle:

create table #TempTable (...

Der # macht es zu einer lokalen (verbindungsspezifischen) temporären Tabelle. Eine globale temporäre Tabelle beginnt mit ##. Für das Erstellen einer temporären Tabelle sind keine besonderen Rechte erforderlich.

9
Andomar

Ich stand auch vor diesem Problem. Es wurde danach gesucht, die meisten Antworten waren von db_owner, dies wurde auch im Security-Menüelement überprüft, aber es wurde nicht angezeigt. Während der Suche bin ich zu this blog gegangen. Ivan Dimitrov 's Antwort gab mir einen kleinen Hinweis. Meine Abfrage bei der Tabellenerstellung war: 

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]

Ich habe das [dbo] entfernt. aus der Abfrage und dann ausgeführt, erfolgreich ausgeführt. Vielleicht ist es keine vollständige Lösung, aber ich habe irgendwie damit gearbeitet.

1
Harry .Naeem

Ich bin nicht sicher, ob diese Antwort hilfreich sein wird, aber ich habe ein ähnliches Problem erlebt, und so habe ich es gelöst. Das Problem, das mir auftrat, war auf die Tatsache zurückzuführen, dass meine 'create table' standardmäßig auf tempdb gesetzt war und ich den Datenbanknamen angeben musste. Wie andere bereits festgestellt haben, habe ich bei meinen DB-Zugriffsoperatoren nachgefragt, ob ich die Berechtigung zum Erstellen von Tabellen hatte. Da ich bereits über die erforderlichen Berechtigungen verfügte, fand ich die Lösung unten.

Der folgende Fehler hat den Tempdb-Fehler zurückgegeben:

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

Nachdem ich den Namen der Datenbank eingegeben hatte, funktionierte der Code gut. Hier ist der Code, der für mich funktioniert hat:

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

Ich hoffe dieser Beitrag ist hilfreich!

0
YimYames