您现在的位置: 首页  > SQLServer > 基础知识
通行证登录
 

“是否允许连接到数据库引擎”和“是否允许登录”的区别

作者:[51ak ]

 
今天上午一朋友问我SQLSERVER 中的用户安全中“是否允许连接到数据库引擎”和“是否允许登录”两个选项有啥区别。
我当时的回答很粗犷
我觉得是一样的
细微的差别
但是禁用以后 字面意思上说
一个是:不让连了
一个是:被禁用了
效果一样
 哈哈
...

后来仔细想了想那微软设置两个选项在那有什么用?
细看了一下代码
所谓 是否允许连接到数据库引擎 其实是 GRANT/DENY  CONNECT SQL TO 用户
所谓 是否允许登录 其实是ALTER LOGIN 用户 ENABLE/DISABLE

一个是方法上控制
一个是用户的可用性上控制

实例测试两者的区别如下

USE [master]
GO
CREATE LOGIN [580top_test] WITH PASSWORD=N'123456', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF


ALTER LOGIN [580top_test] DISABLE
GO

-- 此时用正确的用户名+正确的密码登录显示:登录失败,用户被禁用 错误消息18470
-- 此时用正确的用户名+错误的密码登录显示:登录失败 错误消息18456
ALTER LOGIN [580top_test] ENABLE

GO
GRANT  CONNECT SQL TO [580top_test]
DENY CONNECT SQL TO [580top_test]
GO
-- 此时登录显示:登录失败 错误消息18456
GO
EXEC master..sp_addsrvrolemember @loginame = N'580top_test', @rolename = N'sysadmin'
GO

--设置成SA以后
--DENY CONNECT 设置失效 ,也就是说虽然这个用户被设置了拒绝接入,但因为它是SA 还是一样能进来
--ALTER LOGIN DISABLE 依然有效,用户还是被禁了,就算它是SA

 

总结一下:
 GRANT/DENY  CONNECT :是设置这个用户是否有权限(如果是SA,就算你不让它连,但是大管还是有权连)
LOGIN ENABLE/DISABLE :是设置这个用户是否可用(如果不可用,当然不会走权限那一块,就算是SA也是被禁了)

两者在大多数时间做了同样的事,达到了差不多的结果,但干的不是一样的活

 

 

另:吐槽一下,问我这问题的那哥们最近换工作后,学习热情突然高涨,时不时的在MSN上留下一些特别细的细节问题,好几次把我也整得有点蒙,爱学习的年轻人啊,压力好大啊