Rop*_*tah 3 asp.net connection-string database-connection sql-server-express
我有一个在我的本地PC上运行的SQL Server Express 2008 R2实例.
我采取了以下步骤来创建一个新的登录和数据库:





正如您在上一个屏幕截图中看到的那样,有一个用户名 "dbo",它"属于" 登录名 "mylogin".我正在尝试使用以下连接字符串,但它不起作用:
数据源=(本地)\ sqlexpress;初始目录= newdb;用户ID = mylogin;密码= mypass
SQL Server Management Studio中的错误日志表明:
用户'mylogin'登录失败.原因:无法打开显式指定的数据库.[客户:xxx.xxx.x.xx].错误:18456,严重性:14,状态:38
如果我将连接字符串中的用户ID更改为"dbo",则会报告以下错误:
用户'dbo'登录失败.原因:找不到与提供的名称相匹配的登录信息.[客户:xxx.xxx.x.xx].
我现在开始变得非常疯狂.我根本不知道如何访问任何数据库......我的SQL Server实例是否已损坏?
当我尝试从我的ASP.NET应用程序连接时,只会出现此问题.使用SQL Server Management Studio Express连接,使用提到的凭据DOES工作!
不要尝试将dbo映射到您的登录名.dbo是一个特殊的用户.
要使用SQL身份验证连接到SQL Server,您需要通过登录而不是用户进入(让我们暂时将Denali中包含的数据库留在讨论中).因此,您永远不应该尝试在连接字符串中指定数据库用户(如dbo).我强烈建议创建一个登录,然后在数据库级别创建一个与登录名相同的用户 - 这比尝试将login_foo映射到user_bar要困难得多.我还建议远离用户或登录的特殊字词(例如dbo).
以下是我将如何添加服务器登录,将它们作为用户放入newdb数据库,将它们添加到db_owner(非dbo)角色,并将其默认数据库设置为newdb.在Management Studio中打开一个新的查询窗口并连接到master,然后运行以下命令:
USE [master];
GO
CREATE LOGIN Ropstah_test WITH PASSWORD = 'secure password';
GO
USE newdb;
GO
CREATE USER Ropstah_test FROM LOGIN Ropstah_test;
GO
EXEC sp_addrolemember 'db_owner', 'Ropstah_test';
GO
USE [master];
GO
ALTER LOGIN Ropstah_test WITH DEFAULT_DATABASE = newdb;
GO
Run Code Online (Sandbox Code Playgroud)
现在,来自.NET的连接字符串应如下所示:
Data Source=.\SQLEXPRESS;Initial Catalog=newdb;User ID=Ropstah_test;Password=secure password;
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,我将验证您的ASP.NET应用程序是否在与SQL Express实例相同的计算机上运行.网络服务器也在你的机器上,对吗?除此之外,这应该有效,如果它不起作用,还有一些其他变量并不明显.您不必让用户成为实际的数据库所有者进行连接,但如果上述内容仍无法解决问题,请查看以下脚本是否更改了行为或至少更改了日志中记录的错误消息:
USE newdb;
GO
DROP USER Ropstah_test;
GO
USE [master];
GO
ALTER AUTHORIZATION ON DATABASE::newdb TO Ropstah_test;
Run Code Online (Sandbox Code Playgroud)
这会将用户从数据库中删除,然后将其重新添加为官方所有者(这与db_owner角色不同,这实际上只是授予权限模板的简写).这不应该是必要的,但它可能有助于理清为什么你不能让这个通常很简单的过程工作.
| 归档时间: |
|
| 查看次数: |
31964 次 |
| 最近记录: |