SQL2005的18452的另一种解决办法

用sa登录SQL2005的SQL Server Authentication出现18452错误,在网上查找了一些相关资料,都没有解决问题。最后只能重新创建一个新用户进行SQL Server Authentication登录。
————————————————————————————————————————————网上查到的解决办法:
无法连接到服务器
服务器:消息18452,     级别16,状态1
[Microsoft][ODBC     SQL     Server     Driver][SQL     Server]用户‘sa’登陆失败。原因:未与信任SQL     Server连接相关联
该错误发生的原因是由于SQL     Server使用了”仅     Windows”的身份验证方式,因此用户无法使用SQL     Server的登录帐户(例如     sa )进行连接,解决方法如下

设置允许SQL     Server身份登录     (基本上这个很有用)
操作步骤:
1.在企业管理器中,展开”SQL     Server组”,鼠标右键点击SQL     Server服务器的名称
2.选择”属性”
3.再选择”安全性”选项卡
4.在”身份验证”下,选择”SQL     Server和     Windows”
5.确定,并重新启动SQL     Server服务。

________________________________________________________________________
创建新用户:
以Windoww Authentication方式登录进去:
1、对SQL Server点击鼠标右键—>Properties(属性)—>Security(安全)—>选SQL Server and Windows Authentication mode—->确定
2、输入以下语句
/*–示例说明
示例在数据库pubs中创建一个拥有表jobs的所有权限、拥有表titles的SELECT权限的角色r_test
随后创建了一个登录l_test,然后在数据库pubs中为登录l_test创建了用户账户u_test
同时将用户账户u_test添加到角色r_test中,使其通过权限继承获取了与角色r_test一样的权限
最后使用DENY语句拒绝了用户账户u_test对表titles的SELECT权限。
经过这样的处理,使用l_test登录SQL Server实例后,它只具有表jobs的所有权限。
–*/

USE pubs

–创建角色 r_test

EXEC sp_addrole ‘r_test’

–授予 r_test 对 jobs 表的所有权限

GRANT ALL ON jobs TO r_test

出现这句时不用去理–(The ALL permission is deprecated and maintained only for compatibility. It DOES NOT imply ALL permissions defined on the entity.
)
–授予角色 r_test 对 titles 表的 SELECT 权限

GRANT SELECT ON titles TO r_test

–添加登录 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 为角色 r_test 的成员

 

对新用户l_test进行设置:

1、在SQL Server的security文件夹下的—>Logins文件夹—>l_test点击鼠标右键选择Properties—>选择Server Roles里勾选publice和sysadmin—>选择User Mapping里勾选上面设的数据库和db_owner,public及上面设置的r_test角色—>status里选择Grant,Enabled。

2、关闭SQL。

3、在控制面板–管理工具–服务里重启SQL Server(SQLEXPRESS)服务。

4、重新使用用户名为l_test密码为pwd进行SQL Server Authentication
___________________________________________________________________

以下为删除所设置的新用户:
EXEC sp_addrolemember ‘r_test’,’u_test’

–拒绝安全账户 u_test 对 titles 表的 SELECT 权限

DENY SELECT ON titles TO u_test

/*–完成上述步骤后,用 l_test 登录,可以对jobs表进行所有操作,但无法对titles表查询,虽然角色 r_test 有titles表的select权限,但已经在安全账户中明确拒绝了对titles的select权限,所以l_test无titles表的select权限–*/

–从数据库 pubs 中删除安全账户

EXEC sp_revokedbaccess ‘u_test’

–删除登录 l_test

EXEC sp_droplogin ‘l_test’

–删除角色 r_test

EXEC sp_droprole ‘r_test’

 

 

http://blogold.chinaunix.net/u2/69626/showart_1977818.html

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注