簡體   English   中英

連接數據庫服務器失敗。 如何使用Powershell和集成安全性連接到不在本地主機上的數據庫?

[英]Failed to connect to database server. How do I connect to a database that is not on my localhost using powershell and integrated security?

我的問題的背景

由於我所有的sql server登錄嘗試,我隨時都希望黑色西裝和黑色太陽鏡的安全人員來帶我走。

我使用並改編了虹膜classon的示例,以通過Powershell連接到數據庫。 改編的代碼使用Integrated Security = True”

$dataSource = my_enterprise_db_server
$database = my_db
$connectionString = "Server=$dataSource;Database=$database;Integrated Security=True;" 
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$table = new-object “System.Data.DataTable”
$query = "..."
$connection.Open()
$command = $connection.CreateCommand()
$command.CommandText  = $query
...

工作的熱頭狗。 謝謝艾麗斯。

我閱讀了管理單元與執行sql命令的Import-Module sqlps方法的比較。 我還閱讀了邁克爾·索倫斯在回答中提供的所有鏈接。 我可以掛載一個sqlserver並與mount mydb SQLSERVER SQLSERVER:\\SQL ,使用ls或dir,沿着對象的路徑向下移動,等等。我還修改了Iris提供的主要部分

$table = Invoke-Sqlcmd –Server $dataSource –Database $database -Query $query

此版本的Invoke-Sqlcmd允許我連接到“企業”數據庫。 提供的所有引用的問題在於它們希望您使用localhost sqlexpress數據庫。 我嘗試使用的那一刻

Set-Location SQLSERVER:\SQL\my_enterprise_db_server\my_db

或類似的結構,我收到一條以

...警告:無法獲取SQL Server服務信息。 嘗試連接到“ my_enterprise_db_server”上的WMI失敗,並出現以下錯誤:訪問被拒絕。 (來自HRESULT的異常:0x80070005(E_ACCESSDENIED))

我也看到提到了SQLCMDSERVER和SQLCMDDBNAME環境變量。 我將它們設置為

$env:SQLCMDDBNAME = "my_db"
$env:SQLCMDSERVER = "my_enterprise_db_server"
set-location sqlserver:\sql
ls

產生

MachineName                     
-----------                     
localhost   

如何為不在本地計算機上的數據庫正確使用set-location或New-PSDrive-Name?

我通過偶然的路線找到了答案。 我右鍵單擊sql server management studio中的數據庫對象。 可以選擇啟動Powershell。 即使這看起來像訂購sqlps選項,SSMS也為我提供了設置位置的正確方法。

選項1.如果服務器沒有實例,則在斜線路徑中的server_name之后添加DEFAULT。

Set-Location SQLSERVER:\SQL\server_name\DEFAULT\Databases\database_name\Tables\dbo.table_name

選項2。如果您的服務器帶有實例,則在斜線路徑中的server_name之后設置實例名稱。

Set-Location SQLSERVER:\SQL\server_name\instance_name\Databases\database_name\Tables\dbo.table_name

就數據庫安全性而言,我只是凡人。 由於我的安全設置對dba安全設置的配置方式,我無法使用SSMS的許多功能。 我一直都在SSMS中收到錯誤消息。 嗯,與使用Set-Location的Powershell一樣。 我沒有意識到由於安全策略配置而導致的兩個錯誤消息與飛行員錯誤有關。 如果我將位置設置為表,則只有兩個訪問被拒絕的警告。 如果將位置設置為數據庫級別,那么Powershell會吹一些數據塊,但是我的路徑設置很粗。 如果使用Invoke-SqlCmd,則看不到錯誤。 現在,我看到Powershell中出現安全錯誤的方式就是為什么我認為嘗試連接數據庫的方式存在問題。 現在我可以這樣做:

mount rb SELSERVER SQLSERVER:\SQL\server_name\DEFAULT\Databases\database_name\Tables
# Look at a list of tables.
ls
# Go to a traditional file system
cd F:\
# Go to the Linux Style mounted file system
cd rb:\
# Go to a table like a directory
cd dbo.my_table_name
# Look at the column names
ls
# Use relative navigation
cd ..\dbo.my_other_table_name
ls
# Compare column names with another table using relative navigation after I have just
# listed the current directory/table that I am in.
ls ..\dbo.my_table_name

就是岩石! 現在,我需要做的就是提供一系列服務器名稱和數據庫,以便為我可以連接的所有數據庫創建安裝點。 像這樣的數組只是請求迭代以創建所有安裝點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM