我的组织使用 Active Directory 来控制对我们数据库的访问。构建 Web 应用程序并作为我们 CI 过程的一部分,我想在连接字符串中指定凭据。
是否可以在连接字符串中传递 AD 凭据,或者我是否需要这些项目的标准 SQL 帐户?
sql-server-2005 sql-server-2008 authentication authorization
我们有一个旧的 CRM,它使用带有 Windows 身份验证的 DSN 连接到 SQL Server 2005(SBS 2003 Premium 的一部分)的实例。我们很快将进行一次重大迁移,从而使我们没有 Windows 域——据我所知,这意味着我们需要使用替代身份验证方法。我们还计划在同一时间范围内从 SQL Server 2005 迁移到 SQL Server Express 2008 R2。
不幸的是,无法对 CRM 进行修改。
撇开明显的安全问题不谈,是否可以在系统 DSN 中硬编码用户名和密码?或者,这是我缺少的另一种明显的身份验证方法吗?
- 编辑
DSN 是在Windows 客户端控制面板的“管理工具”部分的ODBC 数据源管理器中定义的。
--编辑 2
由于乔纳森的回答,我放弃了在 DSN 中执行此操作的尝试。幸运的是,我发现了一个 .ini 文件,我可以在其中插入一个固定的用户名/密码来替换占位符 - 问题解决了。
我需要在数百个不属于域的服务器上运行一些临时查询。每个服务器都有一个低权限 SQL 用户帐户,该帐户对一些感兴趣的表具有只读访问权限。
我的想法是将这些服务器的名称存储在一个表中,并使用该表来驱动 OPENDATASOURCE 或 OPENROWSET 命令。
服务器要么在不同的域中,要么在不受信任的域中,要么在工作组中,等等。一团糟。
我一生都找不到如何配置这些命令以使用 SQL Server 帐户/密码组合的示例。
注意:这发生在沙箱中,并不适用于现实世界。这只是一个概念证明,因此安全性不是主要问题。这些服务器是通过一个模拟真实网络增长的过程产生的。
作为记录,我能够让 OPENROWSET 工作:
SELECT *
FROM OPENROWSET('SQLNCLI',
'DRIVER={SQL Server};SERVER=MyServer;UID=MyUserID;PWD=MyCleverPassword',
'select @@ServerName')
Run Code Online (Sandbox Code Playgroud) 先介绍一下背景:
如果所讨论的数据库是按照 DBA 的思维方式构建的,则下面描述的问题根本不存在:
仅通过视图和存储过程访问数据 --> 用户无需对表具有任何权限即可使用该应用程序.
但问题的数据库是一个“开发商的心态”制作的,所以应用程序发送INSERT,UPDATE并DELETE查询到服务器- >它需要有足够的权限的帐户才能够访问数据库。
显然每个人都同意 Windows 身份验证比 SQL Server 身份验证更安全,例如这里:
我的问题:
当数据库是以开发人员的心态构建时,这仍然有效,如上所述?(当用户需要INSERT/ UPDATE/DELETE对表的权限)
为什么我问这个:
我们的主要应用程序是一个带有 SQL Server 数据库的 MS Access 前端。目前,我们正在使用 Windows 身份验证,但我正在考虑切换到 SQL 身份验证。
我看到的问题:
每个人都使用自己的 Windows 帐户连接到数据库。
因此,为了使应用程序工作时,Windows帐户所有人和他们的狗需要有INSERT/ UPDATE/DELETE该表的权限。
这意味着这里的每个人都可以创建一个新的 Access 数据库,从我们的主数据库中链接几个表并编辑(或删除)它们。
是的,我们有一些真正知道如何做到这一点的高级用户。
从这个角度来看,我很难理解为什么在推荐 Windows 身份验证而不是 SQL 身份验证时显然没有考虑这种安全威胁。
对我来说,任何人都可以使用他的 Windows …
我可以毫无问题地远程连接到我的数据库,无论是从我们的网络服务器上的 PHP 脚本还是使用 PGAdmin3。
不幸的是,当我尝试在服务器本身上本地运行 pg_dump 备份时,我得到:
pg_dump --username=postgres -W omega | gzip > omega.10.10.13.gz
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)pg_dump: [archiver (db)] connection to database "omega" failed: FATAL: Peer authentication failed for user "postgres"
以前我的数据库根本没有密码,但为了尝试解决这个问题,我实际上给了 postgres 用户一个密码。仍然没有骰子,对等身份验证每次都失败。
这是我的 pg_hba.conf 文件中的设置...请告诉我可以做什么来解决这个问题。真的想在我的数据库上运行一些备份。
# Database administrative login by Unix domain socket
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections: …Run Code Online (Sandbox Code Playgroud) 正如标题所述,我在尝试使用 ASP.NET webapp 时收到以下错误:
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'. Reason: Token-based server access validation failed with an infrastructure error. Check for previous errors. [CLIENT: 192.168.x.x]
这是来自 SQL 服务器上的“应用程序”日志。我目前有一个集群设置(使用 Microsoft 故障转移集群),尽管第二个节点尚未配置。我试过配置 SPN:
setspn -L myserviceaccount
Registered ServicePrincipalNames for <DN>:
MSSQLSvc/*SQL.corp.*.local:1433
MSSQLSvc/*SQL.corp.*.local
Run Code Online (Sandbox Code Playgroud)
事实上,SQL Server 确实根据其日志正确注册了它:
Message
The SQL Server Network Interface library successfully registered the Service Principal Name (SPN) [ MSSQLSvc/my.sql.fqdn ] for the SQL Server service.
但是,查询SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid ;返回NTLM而不是 …
我很困惑这是如何工作的:
我在这里阅读有关身份验证的 SQL Server 文档:
它说:
Windows 身份验证始终可用且无法禁用
这让我认为到 SQL Server 的所有连接都需要 Windows 身份验证(因为它不能被禁用),但它继续讨论只有SQL Server 身份验证的优点,例如:
SQL Server 身份验证的优点
- 允许 SQL Server 支持具有混合操作系统的环境,其中所有用户均未通过 Windows 域进行身份验证。
那么,是否可以在没有 Windows 身份验证的情况下连接到 SQL 服务器?
我有一个运行 Ruby on Rails 的应用程序,标准的,一点也不花哨。今天,当我在 Postgresql 中更改密码时,我发现该应用程序仍在使用旧凭据运行。这使我有时间使用新的数据库凭据滚动重新启动应用程序。开放连接仍然有效,因为是使用旧凭据进行身份验证的。Postgres 将使这些连接保持活动状态多久?我假设客户端必须重新进行身份验证后必须经过一段时间。我在哪里可以找到更多相关信息?一些设置?试图在https://www.postgresql.org/docs/9.5/static/runtime-config-connection.html上找到一些东西,但仍然不知道它的详细工作原理。
这是一个相当简短的问题:
使用 Microsoft SQL Server(2005 版及更新版本)时,是否有任何与安全相关的原因更喜欢 Windows 身份验证而不是 SQL Server 身份验证?
只是指出,我对与安全相关的问题感兴趣,而不是管理或两者之间的任何其他差异。
更新:如果任何差异导致(或是)安全问题,那么我肯定会感兴趣。
我已经在 Windows 2008 服务器上安装了 SQL Server 2008 R2。sa由于某些原因,我需要将密码设置为空白才能使应用程序正常工作;但似乎几个小时后密码会自动更改。
我使用 Windows 身份验证登录到 SQL Server 并将sa密码设置为空白,我可以使用sa空白密码登录 sql ,但是另一天,当我尝试使用sa空白密码登录时,错误是:
管道的另一端没有进程
错误 233
我的 Windows Server 2012 R2 上有 SQL Server 2014。我可以使用 Windows 身份验证从 Management Studio 本地连接到 SQL Server。
我决定切换到 SQL Server 身份验证(因为我需要从其他计算机访问)。我使用 Management Studio 创建了新的登录,但收到错误:尝试连接时登录失败。
然后我更改了 sa 的密码并尝试以 sa 身份登录,但再次出现相同的错误:

我重新启动了 SQL Server,但没有帮助。我做错了什么?
来自错误日志:用户“sa”登录失败。原因:尝试使用 SQL 身份验证登录失败。服务器配置为仅用于 Windows 身份验证。
在创建特定于环境的登录名(开发、qa、登台、生产等)时,我面临着将表示法作为登录名的前缀或后缀的选择。
prod_MyAppLogin
MyAppLogin_prod
Run Code Online (Sandbox Code Playgroud)
有什么理由让我更喜欢一种策略而不是另一种吗?
(显然,无论我做出什么选择,我都应该保持一致)
在 postgresql 9.5.1 中,我创建了一个名为 GuardDog_02 的用户。我给了它密码。我给了它创建数据库和用户的权限:
CREATE USER GuardDog_02 WITH PASSWORD 'apple100' CREATEDB CREATEUSER;
Run Code Online (Sandbox Code Playgroud)
然后在 GuardDog_02 系统用户(Mac OSX)下:
$ psql -d template1
Password:
psql: FATAL: password authentication failed for user "GuardDog_02"
Run Code Online (Sandbox Code Playgroud)
我更新密码只是为了确保我输入正确:
template1=# ALTER USER GuardDog_02 WITH PASSWORD 'apple100';
Run Code Online (Sandbox Code Playgroud)
仍然说密码验证失败。我也检查了 pg_hba.conf 文件:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# …Run Code Online (Sandbox Code Playgroud) authentication ×13
sql-server ×7
postgresql ×3
security ×2
backup ×1
connectivity ×1
kerberos ×1
openrowset ×1
windows ×1