• sql server的安全登录和用户管理

    2004-06-22

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://jellyfish.blogbus.com/logs/232662.html

    SQL Server支持两种不同的安全模式:
    NT验证模式:Server检测当前使用的Windows NT用户帐户,并在syslogins表中查找该帐户,以确定该帐户是否有权限登录。在这种方式下,用户不必提供密码或登录名让SQL server验证。
    混合安全模式(SQL Server and Windows NT)允许以SQL Server验证方式或N T验证方式来进行连接,使用哪个方式取决于在最初的通信时,使用的是哪个网络库。例如:如果使用TCP/IP Sockets进行登录验证,则将使用SQL Server验证模式。如果使用命名管道,登录验证将使用N T验证模式(windows NT only)。

    安全模式的类型通常取决于网络验证的模型和客户与服务器之间所使用的网络通信协议。如果网络主要是Novell网或者是对等网( peer-to-peer ),可使用SPX网络库和SQL Server验证模式。
    但是,如果网络主要是Windows NT网,那么用户在向Windows NT进行登录时已经得到了确认,因此,使用N T验证模式将减轻工作负担。

    创建登录名:
    创建windows NT登录名(用于windows NT验证模式)
    1.使用Enterprise Manager
    2.使用系统存储过程sp_grantlogin {'l o g i n'}。其中的l o g i n是N T的用户名组名。

    创建SQL Server登录名(用于SQL Server验证模式)
    1.使用Enterprise Manager
    2.使用系统存储过程sp_addlogin [@loginame =] 'login' [,[@passwd =]'password'] [,[@defdb =] 'database'][,[@deflanguage =] 'language'] [,[@sid =] 'sid']
    其中只有第一个参数是必须的。
    两种创建方式的区别:
    企业管理器在缺省数据库及每个Permit列中有选择标记的数据库中为登录名创建了一个数据库用户。而使用存储过程虽然指定了缺省的数据库,但并没有为登录名在该数据库中增加对应的用户对象,在访问数据库时,如果登录名在数据库中没有对应的用户名,这个登录名将自动使用缺省数据库中的guest用户。


    数据库用户名和登录名的关系:
    登录:服务器方的一个实体,使用一个登录名只能进入服务器,但是不能让用户访问服务器中的数据库资源。每个登录名的定义存放在master数据库的syslogins表中

    用户:一个或多个登录对象在数据库中的映射,可以对用户对象进行授权,以便为登录对象提供对数据库的访问权限。用户定义信息存放在每个数据库的sysusers表中。

    一个登录名可以被授权访问多个数据库,但一个登录名在每个数据库中只能映射一次。即一个登录可对应多个用户,一个用户也可以被多个登录使用。
    可以把登录对象比作是驾驶证,把用户对象比作是汽车钥匙来帮助理解。

    如果没有为一个登录指定数据库用户,则登录时系统将试图将该登录名映射成guest用户(如果当前的数据库中有guest用户的话)。如果还是失败的话,这个用户将无法访问数据库。


    收藏到:Del.icio.us