我是一名试图担任管理员的开发人员,希望使用 SQL 服务器用户(“op_web”)从我的开发机器连接到远程 SQL 服务器。
当我尝试从 vs2008 Server Explorer 连接时,我可以连接到服务器,但没有列出任何数据库。如果我使用服务器管理员用户连接,则所有数据库都会按预期列出。
该服务器是我全新安装的。
我有
允许在 SQL Server 中进行远程连接。
在服务器级别创建登录 op_web
在数据库级别创建用户并分配使用相同名称登录
为用户分配角色以允许读写 - 我没有分配任何模式,并且用户的默认模式是 dbo。
如果我使用 sqlserver 管理工作室/sqlserver 身份验证和创建的登录名登录(在服务器本地),我就可以按我预期的方式显示和更改表数据。
远程访问让我无法选择数据库。
在客户端计算机上的 Visual Studio 中,我获得了下拉列表中列出的服务器名称以及发现的 sql 服务器 - 并且如上所述,我能够使用 windows 用户(管理员帐户)进行连接。此外,我还尝试从另一台物理机器进行连接,但结果同样不好。这不像是防火墙问题,但我尝试禁用服务器防火墙以防万一,但这也没有解决问题。我有另一台数据库服务器,其中一切正常,并且我已经将每个设置用户到用户克隆(因此,问题似乎与 sql 服务器实例有关,而不是与用户有关)。
有什么指出我可能遗漏了什么吗?
(这个问题是在https://stackoverflow.com/questions/1386223/how-to-allow-access-for-a-sql-server-user)
答案1
SQL Server“用户”分为两部分。
服务器登录名。定义为服务器级别,可能与服务器角色相关联(例如 dbcreator:“dbcreator 固定服务器角色的成员可以创建、更改、删除和恢复任何数据库”)。将 Windows 用户映射到服务器角色(其中一些是自动完成的,但取决于 SQL Server 1的版本)
数据库用户。这些用户由数据库创建,并被赋予数据库角色(例如“dbo”代表完全控制(“数据库所有者”)或“dbreader”代表能够读取数据)。创建时,这些用户与服务器登录名相关联。
您可以定义服务器和数据库角色来授予特定的权限)。
请参阅 SQL Server 联机丛书(或 MSDN)以了解更多详细信息。
因此,您需要使用管理员帐户为您的 Windows 用户帐户创建服务器登录名,并授予其访问您需要使用的数据库的权限。如果您正在定义事物(表、视图、存储过程等),您确实需要“dbo”角色,或者进行相当多的工作以实现更细粒度的控制。
记住仅使用应用程序所需的访问权限来测试应用程序(例如,很少有应用程序会创建/删除/更改视图或表)。
1在 SQL Server 2005 中,主机的本地管理员组映射到具有“sysadmin”服务器角色的登录名,在 2008 中,您可以在设置中指定要这样映射的帐户。
答案2
为了能够在网络上看到(远程连接),您需要验证 SQL Server 实例是否已为其配置了 TCP/IP 等网络库。您可以使用 SQL Server 配置管理器进行配置。如果您必须进行更改,则在重新启动 SQL Server 之前,更改不会生效。现在,如果它是命名实例,您还需要确保 SQL Server Browser 服务正在运行。这会向尝试查找与命名实例相关的 TCP 端口的客户端提供 TCP 端口。并且您需要确保防火墙上为这两项服务设置了例外。
关于您的 SQL Server 登录名,如果您尝试使用 SQL Server Management Studio 登录,如果收到错误,表明它不是受信任的连接/帐户,则您的 SQL Server 配置为使用仅 Windows 身份验证,这意味着您无法使用基于 SQL Server 的登录名进行连接。在您的例子中,您已指示您已将其设置为混合模式,这正是您想要的。但是,如果您在进行更改后没有重新启动 SQL Server,则可能是问题所在。同样,这是另一个仅在启动时运行的设置。
您可以忽略 Kerberos 错误。这是因为只有域管理员或计算机帐户本身(如果您在 Windows 2003 上以 Nework Service 身份运行)才能注册 SPN。因此,如果您使用其他任何内容,则会出现该错误。在这种情况下,最好手动创建 SPN,但不应在此处输入,因为它仅显示在 Windows 身份验证中。Kerberos 对基于 SQL Server 的登录没有影响。
现在对于 SQL Server 用户,您是否能够使用 SQL Server Management Studio 在本地连接到 SQL Server?
答案3
必须道歉——问题现已解决:
我重新安装了整个服务器,并首先添加了 sql server - 我怀疑通过 SSL 工作的 VisualSVN 破坏了 sqlserver 登录所需的安全连接。
事实上问题仍然存在,但再次尝试禁用防火墙实际上解决了眼前的问题。
我在 1433/TCP 的防火墙上打了一个洞,所有东西都到了我想要的位置。
不过还是感谢您抽出时间……