錯誤 297,嚴重性 19 試圖以系統管理員身份創建新表
我現在完全摸不著頭腦。我有兩個數據庫實例,我試圖向其中添加一個表,並且都給了我同樣的錯誤:
The user does not have permission to perform this action.
我已經三次檢查了權限,我使用的是系統管理員帳戶。執行以下查詢以查看我擁有的創建權限會產生以下結果:
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
我還嘗試使用系統管理員權限創建另一個登錄名,但無濟於事。有任何想法嗎?
錯誤日誌圖片如下:
USE [db_test] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Table]( [a] [int] IDENTITY(1,1) NOT NULL, [b] [nvarchar](50) NULL, [c] [decimal](18, 3) NULL, [d] [bit] NULL, [e] [nvarchar](50) NULL, [f] [nvarchar](10) NULL, [g] [nvarchar](500) NULL, [h] [int] NULL, [i] [int] NULL, [j] [int] NULL, [k] [int] NULL, [l] [int] NULL, [m] [int] NULL, [n] [int] NULL, [o] [int] NULL, [p] [int] NULL, [q] [int] NULL, [r] [int] NULL, [s] [int] NULL, [t] [int] NULL, [u] [int] NULL, [v] [int] NULL, [w] [int] NULL, [x] [int] NULL, [y] [int] NULL, [z] [int] NULL, [aa] [int] NULL, [ab] [int] NULL, [ac] [int] NULL, [ad] [int] NULL, [ae] [int] NULL, [af] [int] NULL, [ag] [int] NULL, [ah] [int] NULL, [ai] [int] NULL, [aj] [int] NULL, [ak] [int] NULL, [al] [int] NULL, [am] [int] NULL, [an] [int] NULL, [ao] [int] NULL, [ap] [int] NULL, [aq] [int] NULL, [ar] [int] NULL, [as] [int] NULL, [at] [int] NULL, [au] [int] NULL, [av] [int] NULL, [aw] [int] NULL, [ax] [int] NULL, [ay] [int] NULL, [az] [int] NULL, [ba] [int] NULL, [bb] [varchar](12) NULL, [bc] [varchar](12) NULL, [bd] [varchar](12) NULL, [be] [varchar](12) NULL, CONSTRAINT [PK_Table] PRIMARY KEY CLUSTERED ( [A] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET IDENTITY_INSERT [dbo].[Table] ON INSERT [dbo].[Table] ([a], [b], [c], [d], [e], [f], [g], [h], [i], [j], [k], [l], [m], [n], [o], [p], [q], [r], [s], [t], [u], [v], [w], [x], [y], [z], [aa], [ab], [ac], [ad], [ae], [af], [ag], [ah], [ai], [aj], [ak], [al], [am], [an], [ao], [ap], [aq], [ar], [as], [at], [au], [av], [aw], [ax], [ay], [trkCusT4SA], [az], [ba], [bb], [bc], [bd]) VALUES (36, N'City', CAST(2.500 AS Decimal(18, 3)), 1, N'SSS', N'CTY', N'http://google.com', 200, -4, 6400, 6700, 150, 450, 6400, 6700, 1400, 1800, 3400, 3800, 8000, 8400, 10100, 10500, 850, 2430, 2880, 4460, 7480, 9060, 9540, 11070, 6400, 6700, 150, 450, 6400, 6700, 1400, 1800, 3400, 3800, 8000, 8400, 10100, 10500, 850, 2430, 2880, 4460, 7480, 9060, 9540, 11070, NULL, NULL, NULL, NULL) ALTER TABLE [dbo].[Tracks] ADD CONSTRAINT [IX_Table] UNIQUE NONCLUSTERED ( [A] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO
跑步
SELECT * FROM sys.dm_exec_trigger_stats
產生以下結果:
這不太可能是權限問題,至少不是您正在考慮的權限類型。典型的權限錯誤如下所示:
Msg 262, Level 14, State 1, Line XXXXX CREATE TABLE permission denied in database 'tempdb'.
現在我們有了更完整的錯誤消息,我們可以看到它表示“嚴重性”為 19。
根據 Microsoft SQL Server 文件:
嚴重性 含義
17-19 表示使用者無法糾正的軟體錯誤。將問題通知您的系統管理員。
19 表示已超出不可配置的數據庫引擎限制,並且目前批處理已終止。嚴重級別為 19 或更高的錯誤消息會停止目前批處理的執行。嚴重級別為 19 的錯誤很少見,必須由系統管理員或您的主要支持提供商糾正。當出現嚴重級別為 19 的消息時,請聯繫您的系統管理員。嚴重級別為 19 到 25 的錯誤消息將寫入錯誤日誌。
這聽起來更像(假設地)使用 SQL Server Express 並達到 10 GB 的數據庫限制(甚至
CREATE TABLE
語句需要添加元數據),而不是權限問題。有了更多資訊,希望有可能縮小其具體來源。以下是迄今為止的測試結果:
- 數據庫不是只讀的
- 使用者 =
dbo
- 能夠在這個確切數據庫的其他幾個相同實例上執行有問題的語句就好了。只有一個本地實例給出錯誤
- 無法使用
CREATE TABLE dbo.[_test] ([Col1] INT);
. 但能夠使用 SSMS 編輯表格並添加行- 無法創建任何東西,而不僅僅是表(視圖/函式/等)。得到同樣的錯誤。
- 數據庫大小為 5008.00 MB,可用空間為 114.16 MB
- 能夠在問題數據庫中創建臨時表:
USE [problem_db]; CREATE TABLE #Bob (Col1 INT);
- 能夠在以下位置創建一個真實的表
tempdb
:USE [tempdb]; CREATE TABLE dbo.Bob2 (Col1 INT);
DBCC TRACESTATUS(-1);
顯示沒有使用中的跟踪標誌- 兼容模式是SQL Server 2014(120),但也試過2017(140)
- 能夠在問題數據庫中創建模式:
CREATE SCHEMA [_DeleteMe];
- 無法在新架構中創建表:
CREATE TABLE [_DeleteMe].[_test] ([Col1] INT);
sys.databases
所有者 SID與問題數據庫中的使用者不匹配dbo
,但已修復且仍無法創建表TRUSTWORTHY
是OFF
,而且OFF
在這個數據庫很好的情況下這裡有一些地方可以檢查是否可以取消送出的操作:
SELECT * FROM sys.triggers; SELECT DB_NAME(ts.[database_id]) AS [Database], OBJECT_NAME(ts.[object_id], ts.[database_id]) AS [Trigger], OBJECT_DEFINITION(ts.[object_id]) AS [Definition], * FROM sys.dm_exec_trigger_stats ts; SELECT * FROM sys.database_audit_specifications; SELECT * FROM sys.database_audit_specification_details; SELECT * FROM sys.security_policies;
我在這裡找到了關於 SQL Server 的類似問題/答案:https ://dba.stackexchange.com/a/82367/123612
問題解決了。在數據庫選項 - 權限選項卡中添加了公共數據庫角色,它是拒絕創建數據庫選項的權限。刪除拒絕權限後,現在可以了。使用者可以創建表。
編輯:雖然這看起來很明顯,但您是否嘗試過右鍵點擊 SQL Studio 並以管理員身份執行?