Chinaunix首页 | 论坛 | 博客
  • 博客访问: 387409
  • 博文数量: 95
  • 博客积分: 3020
  • 博客等级: 中校
  • 技术积分: 865
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-20 10:40
文章分类

全部博文(95)

文章存档

2011年(3)

2010年(8)

2009年(24)

2008年(60)

我的朋友

分类: 数据库开发技术

2009-06-26 10:18:54

用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'

阅读(5910) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~