Sql 无法连接到数据库服务器。如何使用powershell和集成安全性连接到不在本地主机上的数据库?

Sql 无法连接到数据库服务器。如何使用powershell和集成安全性连接到不在本地主机上的数据库?,sql,sql-server,powershell,powershell-module,Sql,Sql Server,Powershell,Powershell Module,我的问题背景 在任何时候,我都希望穿着黑色西装、戴着黑色太阳眼镜的保安人员会来把我带走,因为我所有的sql server登录尝试 我使用并修改了示例,通过Powershell连接到数据库。修改后的代码使用集成安全性=True“ 热狗真管用,谢谢你的爱瑞丝 我阅读了执行sql命令的方法。我还阅读了他回答中提供的所有链接。我可以挂载sqlserver连接到挂载mydb sqlserver sqlserver:\sql,使用ls或dir,沿着对象的路径走,等等。我还修改了Iris提供给我的主要部分 $

我的问题背景

在任何时候,我都希望穿着黑色西装、戴着黑色太阳眼镜的保安人员会来把我带走,因为我所有的sql server登录尝试

我使用并修改了示例,通过Powershell连接到数据库。修改后的代码使用集成安全性=True“

热狗真管用,谢谢你的爱瑞丝

我阅读了执行sql命令的方法。我还阅读了他回答中提供的所有链接。我可以挂载sqlserver连接到
挂载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和SQLCMDDDBName环境变量

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

MachineName                     
-----------                     
localhost   
问题


如何为不在本地计算机上的数据库正确使用set-location或New-PSDrive名称?

我通过一个偶然的途径找到了答案。我在sql server management studio中右键单击了一个数据库对象。有一个启动powershell的选项。尽管这看起来像是order sqlps选项,但SSMS给了我设置位置的正确方法

选项1.如果服务器没有实例,则在slashy路径中的服务器名称后添加DEFAULT

Set-Location SQLSERVER:\SQL\server_name\DEFAULT\Databases\database_name\Tables\dbo.table_name
Set-Location SQLSERVER:\SQL\server_name\instance_name\Databases\database_name\Tables\dbo.table_name
选项2.如果您有一台带有实例的服务器,请在slashy路径中的服务器名称后设置实例名称

Set-Location SQLSERVER:\SQL\server_name\DEFAULT\Databases\database_name\Tables\dbo.table_name
Set-Location SQLSERVER:\SQL\server_name\instance_name\Databases\database_name\Tables\dbo.table_name
就数据库安全而言,我只是一个凡人。由于我的安全设置与dba安全设置的配置不同,SSM的许多功能对我关闭。我一直在SSM中收到错误。这与使用设置位置的Powershell没有什么不同。我没有意识到这两条错误消息因为安全策略配置与引导错误而相关的位置。如果我将位置设置为表,则只有两个拒绝访问的警告。如果我将位置设置为数据库级别,则Powershell会将块吹出一段时间,但我有slashy path设置。如果我使用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

这太棒了!现在我需要做的就是拿出一组服务器名称和数据库来为我可以连接的所有数据库创建挂载点。这样的一个数组只是请求迭代来创建所有挂载点。

你必须这样做吗?你可能没有本地登录该服务器的权限。你是我的管理员吗t?你能不能不要指向它:$DataSource=“ServerName\InstanceName”@adilhinditan Greg不在('admin'、'rdp'、'dba'、'etc'中)。拥有本地数据库没有任何价值。我必须这样做吗?不!啊!但是在Solaris/Linux环境中工作了20年,现在在MS商店工作,我看到了应用于新PSDrive名称的装载别名的奇妙价值。有许多创建目录的技术,例如装载点,然后移植到其他目录中数据等等。使用mount,您可以将路径缩短为仅表。因此,您可以像目录或文件一样使用cd、ls等。查看上面问题中Michael Sorens的文章。您是在尝试管理服务器还是在服务器上为DB编写代码?如果是前者,您需要在PowerShell r的服务器上进行管理emoting/WMI.Devs在prod DBs驻留的服务器上没有管理员权限,因此您几乎可以忘记WMI(虽然从技术上讲它使用DCOM)“透视图,或者如果您在本地管理数据库。如果你是一名开发人员,你所关心的就是提供conn.string,然后做你需要做的事情,而不需要访问数据库所在的实际服务器。@Adilhindtan我发现DBA有时也会保留太多的好东西。由于安全策略的原因,我很少使用SSM,所以我最好使用Oracle的Sql Developer。这将使我在开发查询或使用数据库方面更加有效。