设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 8077|回复: 12
打印 上一主题 下一主题

[原创]关于SQLServer2000 身份验证与安全控制

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2003-12-28 14:17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL Server 2000 联机丛书:
SQL Server 身份验证模式

当 SQL Server 2000 在 Windows NT 或 Windows 2000 上运行时,sysadmin 固定服务器角色成员可以指定下面两种身份验证模式之一:

1.Windows 身份验证模式

    只进行 Windows 身份验证。用户不能指定 SQL Server 2000 登录 ID。这是 SQL Server 2000 的默认身份验证模式。不能为在 Windows 98 上运行的 SQL Server 实例指定 Windows 身份验证模式,因为此操作系统不支持 Windows 身份验证。

    当用户通过 Windows NT 4.0 或 Windows 2000 用户帐户进行连接时,SQL Server 通过回叫 Windows NT 4.0 或 Windows 2000 以获得信息,重新验证帐户名和密码。 SQL Server 通过使用网络用户的安全特性控制登录访问,以实现与 Windows NT 4.0 或 Windows 2000 的登录安全集成。用户的网络安全特性在网络登录时建立,并通过 Windows 域控制器进行验证。当网络用户尝试连接时,SQL Server 使用基于 Windows 的功能确定经过验证的网络用户名。SQL Server 于是验证此人是否是如其所说的那个人,然后只基于网络用户名允许或拒绝登录访问,而不要求单独的登录名和密码。

    登录安全集成在 SQL Server 中任何受支持的网络协议上运行。


    说明 如果用户试图通过提供空白登录名称连接到 SQL Server 的实例,SQL Server 将使用 Windows 身份验证。此外,如果用户试图使用特定的登录连接到配置为 Windows 身份验证模式的 SQL Server 实例,则将忽略该登录并使用 Windows 身份验证。

    与 SQL Server 身份验证相比,Windows 身份验证有某些优点,主要是由于它与 Windows NT 4.0 和 Windows 2000 安全系统的集成。Windows NT 4.0 和 Windows 2000 安全系统提供更多的功能,如安全验证和密码加密、审核、密码过期、最短密码长度,以及在多次登录请求无效后锁定帐户。

    由于 Windows NT 4.0 和 Windows 2000 用户和组只由 Windows NT 4.0 或 Windows 2000 维护,因此当用户进行连接时,SQL Server 将读取有关该用户在组中的成员资格信息。如果对已连接用户的可访问权限进行更改,则当用户下次连接到 SQL Server 实例或登录到 Windows NT 4.0 或 Windows 2000 时(取决于更改的类型),这些更改会生效。

2.混合模式

    如果用户在登录时提供了 SQL Server 2000 登录 ID,则系统将使用 SQL Server 身份验证对其进行验证。如果没有提供 SQL Server 2000 登录 ID 或请求 Windows 身份验证,则使用 Windows 身份验证对其进行身份验证。

    当用户用指定的登录名称和密码从非信任连接进行连接时,SQL Server 通过检查是否已设置 SQL Server 登录帐户,以及指定的密码是否与以前记录的密码匹配,自己进行身份验证。如果 SQL Server 未设置登录帐户,则身份验证将失败,而且用户收到错误信息。 提供 SQL Server 身份验证是为了向后兼容性,因为为 SQL Server 7.0 版或更早的版本编写的应用程序可能要求使用 SQL Server 登录和密码。另外,当 SQL Server 实例在 Windows 98 上运行时,必须使用 SQL Server 身份验证,因为在 Windows 98 上不支持 Windows 身份验证模式。因此,SQL Server 在 Windows 98 上运行时使用混合模式(但只支持 SQL Server 身份验证)。

  尽管建议使用 Windows 身份验证,但对于 Windows NT 4.0 和 Windows 2000 客户端以外的其它客户端连接,可能需要使用 SQL Server 身份验证。

   说明 当使用命名管道连接到在 Windows NT 4.0 或 Windows 2000 上运行的 SQL Server 实例时,用户必须有连接到 Windows NT 命名管道 IPC \\<computername>\IPC$ 的权限。如果用户没有连接权限,则不能使用命名管道连接到 SQL Server 实例,除非计算机上的 Windows NT 4.0 或 Windows 2000 guest 帐户已启用(默认情况下禁用),或者给用户帐户授予"从网络访问该计算机"的权限。

==========================================
实例操作
==========================================

  设置 SQL Server 2000 身份验证模式

  SQL Server 2000 身份验证模式可以在安装过程中指定或使用 SQL Server 企业管理器指定,如下图。

  也可以通过修改注册表的方式来改变,如下图,它保存在
  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer 节的 LoginMode 中。
  LoginMode的键值:1 表示Windows 身份验证模式,2 表示混合模式。

注:改变模式后,必须重新启动 SQL Server 2000 才会生效。

================================================

SQL Server 2000 联机丛书:
若要连接到 Microsoft?SQL Server"! 2000 实例,只需给应用程序提供

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖2 订阅订阅

点击这里给我发消息

2#
 楼主| 发表于 2003-12-28 14:23:00 | 只看该作者


B. 使用 osql 向本地 MSDE 2000 添加 Windows 用户的登录 ID

由于 MSDE 2000 没有企业管理器,可以通过 Osql 运行系统的存储过程 sp_grantlogin 达到同样的目的,下图是用 osql 向本地 MSDE 2000 添加 Windows 用户的登录 ID。


2.为 SQL Server 身份验证的登录 ID 的获取

A. 使用 SQL Server 2000 企业管理器添加登录 ID

下面举例说明如何在 SQL Server 2000 的企业管理器中创建“登录”,打开 SQL Server 2000 的企业管理器并以 sa 身份或 Windows 系统管理员的身份(因为这两个登录拥有 SQL Server 2000 sysadmin 角色的权限)连接到当前运行的 SQL Server 2000 (在本例中是本地的 SQL Server 2000),展开 [安全性] 节点,右键单击 [登录] 选择 [新建登录],这时会打开 [SQL Server 登录发生 -- 新建登录] 窗口,在 [常规] 标签下,在 [名称] 右侧的文本输入框输入登录名 UserX,然后选择 SQL Server 身份验证单选器,输入该登录 ID UserX 登录 SQL Server 要用的密码,然后,为 UserX 登录选择默认数据库,如下图,选择“NorthwindCS”,点击 [确定] 按钮,这时会弹出密码确认对话框,重新输入一次密码,点击 [确定] 按钮,即可。


可是这时弹出一个错误提示框,如下图,说用户没有访问 NorthwindCS 数据库的权限,不要紧,这个问题留待后面的创建数据库用户再进行讲解,点击 [是],到此为止,在 SQL Server 2000 中创建了一个登录 UserX,并选择默认数据库为 NorthWindCS。


B. 使用 osql 向本地 MSDE 2000 添加登录 ID

通过 Osql 运行系统的存储过程 sp_addlogin 添加登录 ID,下图是用 osql 向本地 MSDE 2000 添加登录 ID 为 UserX 密码为 123456 默认数据库为 NorthwinCS 的登录 ID。


  二、数据库用户的设置

  登录 ID 本身并不提供访问数据库对象的用户权限。一个登录 ID 必须与每个数据库中的一个用户 ID 相关联后,用这个登录 ID 连接的人才能访问数据库中的对象。如果登录 ID 没有与数据库中的任何用户 ID 显式关联,就与 guest 用户 ID 相关联。如果数据库没有 guest 用户帐户,则该登录就不能访问该数据库,除非它已与一个有效的用户帐户相关联。

A. 使用 SQL Server 2000 企业管理器在 NorthwindCS 数据库上添加用户

  下面举例说明如何在 SQL Server 2000 的企业管理器中创建数据库“用户”,打开 SQL Server 2000 的企业管理器并以 sa 身份或 Windows 系统管理员的身份连接到当前运行的 SQL Server 2000 (在本例中是本地的 SQL Server 2000),展开 NorthwindCS 数据库节点,右键单击 [用户] 选择 [新建数据库用户],打开数据库用户属性对话框如下图,首先选择登录名,本例为 MYDESK\UserSQL,这时用户名输入文本框中出现默认的用户名 MYDESK\UserSQL,本例不作修改,使用默认值。为了能使该用户拥有对该数据库的全部权限,勾选数据库角色成员列表中的 db_owner,点击 [确定] 按钮,就为该数据库创建了一个名为 MYDESK\UserSQL 的用户,并与登录 ID MYDESK\UserSQL 相关联。


B. 使用 osql 在 NorthwindCS 数据库上添加用户

  下图使用 osql 在 NorthwindCS 数据库中添加用户 ID MYDESK\UserSQL 和 UserX 分别与登录 ID MYDESK\UserSQL 和 UserX 相关联,并把它们均设为数据库的 db_owner 角色。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

点击这里给我发消息

3#
发表于 2003-12-28 16:53:00 | 只看该作者
又是精心之作:)

点击这里给我发消息

4#
 楼主| 发表于 2003-12-29 00:41:00 | 只看该作者
完整的文章:

http://www.office-cn.net/Article_Show.asp?ArticleID=275


[此贴子已经被作者于2003-12-28 16:43:20编辑过]

5#
发表于 2003-12-29 00:41:00 | 只看该作者
不错,有必要加以“另存为”

点击这里给我发消息

6#
发表于 2003-12-29 02:57:00 | 只看该作者
“另存为”还保存版权,我一般 copy & paste 据为己有
7#
发表于 2003-12-30 00:15:00 | 只看该作者
精品!

点击这里给我发消息

8#
 楼主| 发表于 2003-12-31 00:27:00 | 只看该作者


本子程序配合上面贴子。

Option Compare Database
Public appAccess As Access.Application

Sub CallSQLDMOSQLServerLogin()
    Dim srvname As String
    Dim suid As String
    Dim pwd As String
   
    ' 设置 SQL Server 的登录参数
    srvname = "(local)"
    'suid = "sa"
    'pwd = ""
   
    ' 调用 SQL Server 登录过程
    SQLDMOSQLServerLogin srvname, suid, pwd
End Sub


Sub SQLDMOSQLServerLogin(srvname As String, suid As String, pwd As String)
    Dim srv1 As SQLDMO.SQLServer
   
    ' 新建一个服务器实例
    Set srv1 = New SQLDMO.SQLServer
   
    ' 调用 SQL Server 登录连接方法
    srv1.Connect srvname, suid, pwd
   
   
    ' 断开连接
    srv1.Disconnect
    Set srv1 = Nothing
End Sub


Sub CallSQLDMOWindowsLogin()
    Dim srvname As String
   
    ' 设置 Windows 登录参数
    srvname = "(local)"
   
    SQLDMOWindowsLogin srvname
End Sub


Sub SQLDMOWindowsLogin(srvname As String)
    Dim srv1 As SQLDMO.SQLServer
   
    ' 新建一个服务器实例
    Set srv1 = New SQLDMO.SQLServer
   
    ' 在调用前,设置 LoginSecure 属性为 True
    ' 使用服务名进行连接
    srv1.LoginSecure = True
    srv1.Connect srvname
   
    ' 断开连接
    srv1.Disconnect
    Set srv1 = Nothing
End Sub

Sub CallChangeServerAuthenticationMode()
    Dim constAuth As Byte
   
    ' 设置 constAuth 参数为:
    '    SQLDMOSecurity_Integrated 为 Windows Authentication 模式
    '    SQLDMOSecurity_Mixed 为 Mixed Authentication 模式
   
    ' 设置 constAuth 的默认值
    constAuth = SQLDMOSecurity_Mixed
   
    ' 调用改变 SQL Server 身份认证模式的方法
    ChangeServerAuthenticationMode constAuth
End Sub

Sub ChangeServerAuthenticationMode(constAuth As Byte)
    Dim srv1 As SQLDMO.SQLServer
   
    ' 指定哪个服务器,默认为 Local (本地服务器)
    srvname = "(local)"
   
    ' 使用集成安全(Windows)方式新建一个 SQL Server 对象并进行连接
    Set srv1 = New SQLDMO.SQLServer
    srv1.LoginSecure = True
    srv1.Connect srvname
   
    ' 设置 SecurityMode 属性为 Windows 或混合身份验证模式
    srv1.IntegratedSecurity.SecurityMode = constAuth
    srv1.Disconnect
   
    ' 调用 Stop 方法停止服务器,直到服务器完全停止
    srv1.Stop
    Do Until srv1.Status = SQLDMOSvc_Stopped
    Loop
   
    ' 重新以混合模式启动服务器
    srv1.Start True, srvname
   
    ' 断开连接
    srv1.Disconnect
    Set srv1 = Nothing
End Sub

Sub ToWindowsAuthentication()
    Dim srv1 As SQLDMO.SQLServer
   
    ' 指定哪个服务器,默认为 Local (本地服务器)
    srvname = "(local)"
   
    ' 使用集成安全(Windows)方式新建一个 SQL Server 对象并进行连接
    Set srv1 = New SQLDMO.SQLServer
    srv1.LoginSecure = True
    srv1.Connect srvname
   
    ' 设置 SecurityMode 属性为 Windows 身份验证模式
    srv1.IntegratedSecurity.SecurityMode = SQLDMOSecurity_Integrated
    srv1.Disconnect
   
    ' 调用 Stop 方法停止服务器,直到服务器完全停止
    srv1.Stop
    Do Until srv1.Status = SQLDMOSvc_Stopped
    Loop
   
    ' 重新以混合模式启动服务器
    srv1.Start True, srvname
   
    ' 断开连接
    srv1.Disconnect
    Set srv1 = Nothing

End Sub

Sub WindowsToMixedAuthentication()
Dim srv1 As SQLDMO.SQLServer

    ' 指定哪个服务器,默认为 Local (本地服务器)
    srvname = "(local)"
   
    ' 使用集成安全(Windows)方式新建一个 SQL Server 对象并进行连接
    Set srv1 = New SQLDMO.SQLServer
    srv1.LoginSecure = True
    srv1.Connect srvname
   
    ' 设置 SecurityMode 属性混合身份验证模式
    srv1.IntegratedSecurity.SecurityMode = SQLDMOSecurity_Mixed
    srv1.Disconnect
   
    ' 调用 Stop 方法停止服务器,直到服务器完全停止
    srv1.Stop
    Do Until srv1.Status = SQLDMOSvc_Stopped
    Loop
   
    ' 重新以混合模式启动服务器
    srv1.Start True, srvname
   
    ' 断开连接
    srv1.Disconnect
    Set srv1 = Nothing

End Sub

Sub CallOpenADPWindowsOrSQLServer()
    Dim srvname As String
    Dim dbname As String
    Dim prpath As String
    Dim prname As String
    Dim suid As String
    Dim pwd As String
    Dim bolWindo
9#
发表于 2006-11-13 19:19:00 | 只看该作者

点击这里给我发消息

10#
发表于 2010-7-30 12:53:18 | 只看该作者
原来很早就有这等好帖了,保存下来慢慢学习,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-27 01:06 , Processed in 0.116875 second(s), 36 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表