Sql-Server

SELECT 權限被拒絕嘗試將數據導入 Excel

  • December 11, 2014

我們最近遷移到更新版本的程序,並將其數據庫從 SQL Server 2000 遷移到 SQL Server 2008 R2。我們有一些 Excel 文件,它們執行一些自定義查詢來提取數據。我更改了連接字元串中的值以反映我們的 2008 R2 設置:

DRIVER={SQL Server};SERVER=SQL01;UID=PSI;Trusted_Connection=Yes;DATABASE=PSI_DB_A;

嘗試在 Excel 中進行刷新會出現錯誤:

對象“ARTRNTRX”、數據庫“PSI_DB_A”、模式“dbo”的 SELECT 權限被拒絕。

在發布之前,我在這個網站和網路上的許多地方研究了這個錯誤;嘗試一些建議的東西。

唯一的區別是,對於 SQL Server 2000,使用者“sa”可以訪問所有內容和每個數據庫。我們希望在 2008 R2 中避免這種情況。所以我創建了 PSI 使用者並希望給它有限的訪問權限。無論如何,我們只是在這幾個 Excel 表中執行 SELECT 查詢。

使用 SSMS,在安全 > 登錄 > PSI > 屬性 > 使用者映射 > 我給“PSI”使用者 PSI_DB_A 的“db_datareader”角色。然後在 Databases > PSI_DB_A database > Properties > Permissions > 我選擇 PSI 使用者並授予他們列表中的“連接”和“選擇”權限。

但是當我嘗試刷新 Excel 中的數據時,我仍然收到 SELECT 權限錯誤。我在這裡不知所措。

編輯:

經過一番探勘,我注意到在 Excel 中,我可以使用 From Other Sources > From SQL Server > Enter server name > Select Database PSI_DB_A 從列表中連接到 SQL Server,它會顯示視圖和表。但僅顯示某些表格,而不是所有表格。

回到 SSMS,我展開了數據庫下的表列表,右鍵點擊一個表(在 Excel 中顯示的其中一個表上)> 屬性 > 權限。在使用者/角色下,顯示了使用者“public”,該使用者被授予 SELECT 等權限。但在 90% 的其他表中,“public”並未列出。

為什麼需要在表權限級別添加“public”,當我定義了一個應該對數據庫中所有表具有完全讀取權限的登錄使用者時?

在審查了您的錯誤之後。我嘗試在我的 TEST 環境中進行設置,但收到了錯誤消息。

如果您從 Excel 設置連接並在選擇特定表進行測試後轉到連接屬性。

您將能夠看到連接字元串。嘗試使用您的查詢對其進行驗證,並查看它是否正在更改查詢中連接字元串中的任何參數。

在此處輸入圖像描述

試試看,讓我們知道它的任何進展。

Trusted_Connection=Yes這可能是由於您在連接字元串中指定的事實。這將使用您目前在客戶端登錄的域帳戶使用 Windows 身份驗證建立連接,有效地忽略 UID 參數。嘗試刪除該參數並重新執行。您可能需要在連接字元串中提供密碼,但由於這不安全,您還可以保留 Trusted Connection 參數,將使用者的 Windows 登錄名放在域組中,並將域組 SELECT privs 授予適當的對象。

引用自:https://dba.stackexchange.com/questions/85933