web-dev-qa-db-fra.com

Autorisation CREATE TABLE refusée dans la base de données 'tempdb'

La première fois que j'ai installé SQL Server Management Studio Express et Visual Studio 2005 sur mon système. Maintenant, j'essaie de créer une table en utilisant le script ci-dessous. Mais si une fois que j'exécute, je suis confronté à une erreur comme 

Autorisation CREATE TABLE refusée dans base de données 'tempdb'.

Pourquoi ça? Quelqu'un peut-il m'aider à résoudre ce problème?

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]

Merci Raju

15
Raju

Mon hypothèse initiale est que vous ne disposez pas des droits CREATE sur ce serveur. Pouvez-vous s'il vous plaît exécuter ces ensemble de requêtes ci-dessous?


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

Si la colonne nom_autorisation renvoie 0 ligne, cela signifie que vous ne disposez pas de l'autorisation CREATE sur ce DB. contactez votre administrateur de base de données pour accorder db_ddladmin à tempDB. Cependant, comme l'a noté Andomar, les tables temporaires sont automatiquement créées dans tempDB lorsqu'elles sont pré-ajoutées avec # .

11
Ram

Je suis allé dans la base de données, la sécurité, les utilisateurs, un clic droit sur l'utilisateur, les propriétés . Adhésion, vérifié 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

Vous avez besoin du rôle db_ddladmin pour que l'utilisateur prévu crée une nouvelle table. alors le rôle de db_datawriter ne suffirait pas. 

10
ModChowdhury

Vous essayez de créer une table permanente dans tempdb. C'est plutôt inhabituel, tempdb est complètement effacé chaque fois que le service SQL Server redémarre.

La manière normale de créer une table temporaire est la suivante:

create table #TempTable (...

Le # en fait une table temporaire locale (spécifique à la connexion). Une table temporaire globale commence par ##. Aucun droit spécial n'est requis pour créer une table temporaire de cette façon.

9
Andomar

J'ai fait face à ce problème aussi. La recherche a été effectuée, la plupart des réponses provenaient de db_owner, cela a également été vérifié dans le menu Sécurité, mais cela n’a pas été affiché. En cherchant je suis allé sur this blog. La réponse de Ivan Dimitrov m'a donné un indice. Ma requête de création de table était: 

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]

J'ai enlevé le [dbo]. De la requête, puis je l'ai exécuté correctement. Peut-être que ce n’est pas une solution complète, mais j’ai réussi à l’utiliser d’une.

1
Harry .Naeem

Je ne sais pas si cette réponse vous sera utile, mais j'ai rencontré un problème similaire et voici comment je l'ai résolu. Le problème que je rencontrais était dû au fait que ma «table de création» était définie par défaut sur tempdb et que je devais spécifier le nom de la base de données. Comme d'autres l'ont indiqué, j'ai vérifié auprès de mes opérateurs d'accès à la base de données pour m'assurer que j'avais les autorisations de créer une table. Comme j'avais déjà les autorisations nécessaires, j'ai proposé la solution ci-dessous.

Les éléments suivants ont renvoyé l'erreur tempdb:

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

Une fois que j'ai inclus le nom de la base de données, le code a bien fonctionné. Voici le code qui a fonctionné pour moi:

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

J'espère que ce post est utile!

0
YimYames