Cannot find the user 'dbo', because it does not exist or you do not have permission
1. 檢查目前資料庫中的使用者是否存在 dbo 確認 dbo 是否真的是一個 "使用者"(user),而不是只有 schema。 -- 查詢目前資料庫內所有的使用者 SELECT name, type_desc FROM sys.database_principals WHERE name = 'dbo'; 若查不到 dbo 或其 type_desc 不是 SQL_USER 或 WINDOWS_USER,表示它不是一個 user。 正確情況下 dbo 應該是 DATABASE_ROLE,不是使用者。 2. 檢查哪一行語法錯誤地參照了 dbo 作為 user 搜尋 SP 或 SQL 檔中使用 GRANT, REVOKE, DENY 等授權語句對象是否錯誤指向 dbo: -- 搜尋資料庫內的物件含有 'GRANT ... TO dbo' SELECT OBJECT_NAME(object_id), definition FROM sys.sql_modules WHERE definition LIKE '%GRANT%TO dbo%'; 哪些 Stored Procedure 或 View 中誤用 GRANT TO dbo。 3. 在 SSMS 的 Object Explorer 中檢查目前登入帳號是否有權限存取目前資料庫 如果你懷疑是登入帳號無權限,也可能會報這錯: -- 查看目前帳號是否有 mapping 到目前資料庫 SELECT dp.name AS UserName, dp.type_desc, dp.authentication_type_desc FROM sys.database_principals dp WHERE dp.sid = SUSER_SID(); -- 目前登入帳號的 SID 或 -- 顯示目前登入帳號所擁有的權限 SELECT * FROM fn_my_permissions(NULL, 'DATABASE'); 若查不到權限,表示登入帳號無權操作目前資料庫,可能造成 GRANT TO dbo 這類語法被拒絕執行。 4. 檢查是否有混淆 schema 與 user 的概念 有時候開發人員誤把 dbo 當作使用者來授權,其實它是 schema: --...