日期:2014-05-18  浏览次数:21124 次

uid=sa; pwd=123 从哪来的?
SQL code
_bstr_t strConnect= "Provider=SQLOLEDB;Server=(local);Database=student;uid=sa; pwd=123;";



ERROR:用户 'sa' 登录失败。该用户与可信 SQL Server 连接无关联。请按任意键继续. .
.

会出现上面错误


我用的是 SQL2005 用windows账户登陆的 ,uid 和 pwd 在哪设置的?

------解决方案--------------------
sa是你的sqlserver的用户,123是密码
------解决方案--------------------
2000 or 2005 ?
------解决方案--------------------
方法一:
企业管理/安全性(security)/选择账号sa属性/更改

方法二:
alter login [sa] with password=N'123'
------解决方案--------------------
1:开启SQL2005远程连接功能 
  配置工具->SQL Server外围应用配置器->服务和连接的外围应用配置器->打开SQLEXPRESS下的DataBase Engine节点,选择远程连接,选择“同时使用TCP/IP和named pipes”,确定后,重启数据库服务。 
  2:登录改为混合模式 
  打开管理器,用windows方式连接进入数据库,右键点击数据服务器-属性,安全性,在“服务器身份验证”下选择“SQL SERVER和windows身份验证模式”,"登录审核"选“失败和成功的登录”确定。 
  3:新建用户和密码,与sql2000类似,不做介绍 
  这样就可以用数据连接字符串进行连接了,比如(server=.\\sqlexpress;uid=sa;pwd=密码;database=数据库名称") 
  如果在用SQLServer模式连接的时候,报错“已成功与服务器建立连接,但是在登录过程中发生错误” 
  展开服务器上的"安全性"->登陆名->选中SA登陆帐号(右键)->状态->登陆修改为启用。

------解决方案--------------------
用户得认证方式是windows还是混合认证?

先改为混合认证
------解决方案--------------------
探讨
无法打开登录所请求的数据库 "student"。登录失败。请按任意键继续. . .

为什么我用sa 的可以,自己新建的就不行?

------解决方案--------------------
不过这是2000的
SQL code
/*--创建一个只允许特定程序使用的数据库用户

    创建一个用户,这个用户只有用我们特定的应用程序登录
    才具有访问数据库的权限,用其他工具登录没有任何权限

    在下面的示例中,演示了如何控制登录l_test
    使其登录后只允许访问pubs数据库的titles表
    而对jobs表的访问权限,只允许在某些许可的应用程序中访问。

--邹建 2004.09(引用请保留此信息)--*/

--创建测试环境
USE pubs

--创建一个登录 l_test, 密码 pwd, 默认数据库 pubs
EXEC  sp_addlogin  'l_test','pwd','pubs' 

--为登录 l_test 在数据库 pubs 中添加安全帐户 u_test
EXEC sp_grantdbaccess 'l_test','u_test'

--授予安全帐户 u_test 对 titles 表的 SELECT 权限
GRANT SELECT ON titles TO u_test

--创建一个应用程序角色 r_p_test, 密码 abc
EXEC sp_addapprole 'r_p_test','abc'

--授予角色 r_p_test 对 jobs 表的 SELECT 权限
GRANT SELECT  ON jobs TO r_p_test
GO


--创建好上面的测试后,现在来测试如何使用应用程序角色
--我们把用户及密码告诉使用者,即告诉使用者,用户是: l_test,密码是: pwd
--使用者可以用我们这个用户在任何地方登录,包含查询分析器
--但是,用户只能访问 titles 表,不能访问其他对象,如果建立用户时不授予它任何权限,则它不访问除guest用户和public角色允许访问外的任何对象
--OK,到这里,我们是把用户控制住了

--下面我们再来说在程序中的处理,因为用户在程序中登录后,需要对jobs表有访问权限的
--我们只需要在用户登录后,执行一句
    EXEC sp_setapprole 'r_p_test',{Encrypt N'abc'},'ODBC'
--这样,我们登录的用户就转变为 r_p_test 角色的权限,而它自身的权限丢失
--只要这个用户不退出应用程序,他的权限就会保持
--如果用户退出了当前应用程序,则他的权限自动收回
--同时,这个用户即使没有退出应用程序,他也是只在我们的应用程序中有权限,在其他地方登录,也不会有权限
--因为这个密码我们是不用给用户的,所以,用户没有这个角色的密码,也就限制了他只能在程序中使用我们的数据

--激活应用程序角色 r_p_test 前,登录具有表 titles 的访问权,但无表 jobs 的访问权
SELECT titles_count=COUNT(*) FROM titles
SELECT jobs_count=COUNT(*) FROM jobs
/*--结果:
titles_count 
------------ 
18

(所影响的行数为 1 行)

服务器: 消息 229,级别 14,状态 5,行 2
拒绝了对对象 'jobs'(数据库 'pubs',所有者 'dbo')的 SELECT 权限。
--*/
GO

--用密码 abc 激活 r_p_test 应用程序角色,并且在将此密码发送到SQL Server之前对其加密
EXEC sp_setapprole 'r_p_test',{Encrypt N'abc'},'ODBC'
GO

--激活应用程序角色 r_p_test 后,登录失去表 titles 的访问权,获取表 jobs 的访问权
SELECT titles_count=COUNT(*) FROM titles
SELECT jobs_count=COUNT(*) FROM jobs
/*--结果
服务器: 消息 229,级别 14,状态 5,行 2
拒绝了对对象 'titles'(数据库 'pubs',所有者 'dbo')的 SELECT 权限。
jobs_count  
----------- 
14

(所影响的行数为 1 行)
--*/
go

--删除测试
EXEC sp_dropapprole 'r_p_test'
EXEC sp_revokedbaccess 'u_test'
EXEC sp_droplogin 'l_test'

------解决方案--------------------