最近,在SQLServer中使用Windows用户组时,发现了一些比较诡异的问题。
SQL Server版本:SQL Server 2008 R2
问题1:Login failed for user 'xx\xx'
操作描述:
在SQL Server中添加一个Windows用户,并且使用该用户连接SQLServer(Windows身份验证),登录失败,日志中出现如下错误:
Login failed for user 'xx\xx'. 原因:
基于令牌的服务器访问验证失败,出现基础结构错误。请检查以前的错误。 [客户端: <xxxx>]
检查权限分配没有任何异常,后来属性,该用户属于一个Windows用户组,这个用户组也是SQL Server的Login,并且显式拒绝了CONNECT
SQL权限,尝试去掉Windows组上的拒绝权限,发现可以正常登录。
反复测试后发现,如果Windows用户和它所属的Windows用户组都是SQLServer的Login的话,则Windows用户的权限为其自身的权限+所属Windows组的权限,并且拒绝权限优先。也就是说,只要Windows用户所属的用户组具有某个对象的访问权限,那么Windows用户也会有这个权限;而如果其所属的用户组设置了拒绝权限,则即使显式给Windows用户权限,也会出现权限拒绝的现象。我所遇到的问题,就是因为用户所属Windows用户组设置了拒绝连接SQL
Server,所以不管我是否授予用户连接SQL Server的权限,均无法连接SQL Server。
操作描述:
这个是在测试问题1的过程中发现的。当我为Windows用户组授予了某个数据库的权限之后,这个用户组所属的用户也获得了这个权限(没有为用户显式授权),这个在问题1中已经结案了。
现在的问题是,当我把Windows用户组对应的Login(是实例级别的Login,不是数据库级别的User)删除后,发现这个组对应的Windows用户(在SQLServer中有对应的Login)还是具有所属Windows用户组的权限。
看起来在删除Windows用户组的时候要小心,不但要删除Login,还要删除数据库级别的User。否则可能会因为这个而产生安全漏洞。
注:
删除Login的时候,数据库级别的User不会自动删除,这种User称之为孤立用户。(联机帮助上的原文“如果删除了对应的 SQL Server
登录名,则数据库用户可能会变为孤立用户”)。
孤立用户由于没有Login,无法产生与之相关的登录,所以一般情况下我们会认为孤立用户不会影响到安全性。但对于Windows用户组,看起来就危险了。
操作描述:
在问题2的基础上,发现了一个列有趣的问题。可以直接通过CREATE
USER [xx\xx]
FOR LOGIN [xx\xx]语句,在DB级别上,为Windows用户组创建User,并且可以授权。这似乎就是人为创建孤立用户了。
分享到:
相关推荐
Windows Server 2012 + SQL Server 2016安装必读
本文介绍了SQL Server 2019 for Windows Server 2019无域搭建always-on。测试通过后,采用图文结合的方式,说明和讲解了SQL Server 2019 for Windows Server 2019无域搭建always-on的方法、步骤及关键点。
在SQL Server中创建用户角色及授权(使用SQL语句)
WINDOWS7 SQL SERVER,在windows7上安装sql server
一台服务器名为SQL7,另一台叫SQL2000,在SQL7 上运行SQL Server 7.0,在SQL2000上运行着SQL Server 2000。SQL2000的网络库配置如下所示:(原题不完整) SQL7的网络库有命名管道、TCP/IP、NWLink IPX/SPX以及多协议...
SQLServer使用中应当注意的一些问题
--本文档共71页,对基于windows server2019集群服务下Sql Server 2019安装进行详细说明,对每个步骤均进行详细图文讲解。 微软群集MSCS群集服务器是一组独立的服务器,运行群集服务,并像单个系统一样运作。通过将...
在Windows Server2016中安装SQL Server2016
SQL Server 2005 移动版(SQL Server Mobile)或SQL Server 2000 Windows CE 2.0版(SQL Server CE 2.0)的企业和个人用户如果计划与SQL Server 2000或SQL Server 2005数据库保持同步,需要在您运行Microsoft ...
让软件企业在发布基于SQLServer2000数据库软件的时候,只要把软件打包进入安装包而不需要再单独安装数据库,也不需要另外进行数据库的设置,就如同使用ACCESS数据库一样简单,但却是SQLServer2000这样大中型数据库的...
Windows Event Log和 SQL Server Error Log是这样的日志, PS: SQL Server 中的错误日志 (Error Log) 类似于 Oracle中的alert 文件。 一. 错误日志简介 1. Windows事件日志与SQL Server 错误日志 Windows...
SQL Server 2000 Windows CE Edition (SQL Server CE) 2.0 是一个精简数据库,用于在本机模式或 .NET Framework 精简版中快速开发应用程序,从而将企业数据管理能力扩展到设备中。 本 SQL Server CE 下载软件包可...
将mysql数据库转换为sql server的数据库,或者将sql server数据库转换为mysql的数据库,在nt环境下很多时候都会用到。使用mysql odbc后就比较好办,可以使用sql server的管理工具,也可以使用mysql的管理工具,更可以...
Sybase中的用户分为两种:SQL服务器用户和数据库用户。 安装完SQL服务器后,系统自动建立一个SQL服务器用户sa,口令为空,即系统管理员,...数据库用户一般可分为用户组,任一数据库在建立后即被赋予一个用户组public。
适用 SQL Server Native Client 的这个可转散发安装程序会安装运行时间期间需要的客户端组件,以利用 SQL Server 2008 新功能,并选择性地安装开发使用 SQL Server Native Client API 之应用程序时所需要的头文件。
sqlserver离线安装包
Linux平台下访问Windows平台的SQL Server数据库的方法.pdf
Windows Server 2012 R2安装SQL Server 2012出现的问题;OS 和 SQL Server 语言不同导致的报错 解决方法:在OS中安装相应的语言包 去控制面板添加
在SQL Server里查看当前连接的在线用户数
解决sqlserver数据库迁移后用户映射不上的问题