Sql Server用户名和登录名的关系总结
以前经常被Sql Server中的用户名和登录名搞迷糊,因为用sa(登录名)就搞定一切东西了,当然这会存在一些安全隐患。网上的文章也貌似讲得很好,但还是不明白。今天决心把这个问题弄明白。mashallah, 看了N多文章加实验后终于弄明白了(学东西最重要的还是要亲自动手试试),现将学到的分享一下,看是否对你有帮助。
登录名:服务器方的一个实体,使用一个登录名只能进入服务器,但是不能让用户访问服务器中的数据库资源。每个登录名的定义存放在master数据库的syslogins表中
用户名:一个或多个登录对象在数据库中的映射,可以对用户对象进行授权,以便为登录对象提供对数据库的访问权限。用户定义信息存放在每个数据库的sysusers表中。
SQLSERVER把登录名与用户名的关系称为映射。用登录名登录SQLSERVER后,在访问各个数据库时,SQLSERVER会自动查询此数据库中是否存在与此登录名关联的用户名,若存在就使用此用户的权限访问此数据库,若不存在就是用guest用户访问此数据库(guest是一个特殊的用户名,后面会讲到)。
一个登录名可以被授权访问多个数据库,但一个登录名在每个数据库中只能映射一次。即一个登录可对应多个用户,一个用户也可以被多个登录使用。好比SQLSERVER就象一栋大楼,里面的每个房间都是一个数据库.登录名只是进入大楼的钥匙,而用户名则是进入房间的钥匙.一个登录名可以有多个房间的钥匙,但一个登录名在一个房间只能拥有此房间的一把钥匙。
链接或登录Sql Server服务器时是用的登录名而非用户名登录的,程序里面的链接字符串中的用户名也是指登录名。
SQLSERVER中有几个特殊的登录名和用户名:
我们常见的dbo(用户名)是指以sa(登录名)或windows administration(Windows集成验证登录方式)登录的用户,也就是说数据库管理员在SQLSERVER中的用户名就叫dbo,而不叫 sa,这一点看起来有点蹊跷,因为通常用户名与登录名相同(不是强制相同,但为了一目了然通常都在创建用户名时使用与登录名相同的名字),例如创建了一个登录名称为me,那么可以为该登录名me在指定的数据库中添加一个同名用户,使登录名me能够访问该数据库中的数据.当在数据库中添加了一个用户me 后,之后以me登录名登录时在该数据库中创建的一切对象(表,函数,存储过程等)的所有者都为me,如me.table1,me.fn_test(),而不是dbo.table1,dbo.fn_test().
SQL Server中还有一个特殊的数据库角色public,它存在于每一个数据库中,包括系统数据库,如master、msdb、model和用户数据库,数据库的所有用户都属于public角色,并且不能从public角色中删除。
在SQLSERVER数据库中,guest帐户是特殊的用户帐户。如果用户使用USE database语句访问的数据库中没有与此用户关联的帐户,此用户就与guest用户相关联。
另外SQLSERVER采取登录名-用户名的安全规则,和Oracle里面的schema有点像。SQLSERVER使用所有者进行限定(类似于Oracle中的schema),是因为不同的用户可能创建同名的对象,例如登录名me和登录名you在pubs数据库中分别创建了用户名me和you,这二个用户都创建了testtable这个同名表,而这二个表虽然同名但结构或数据可能完全不同,为了避免调用错误,必须使用所有者名称进行限定.
如何来调用别的用户创建的对象呢?例如me用户访问you用户创建的表或访问dbo创建的表. 此种情况,必须同时满足二个条件:
1.将me用户的数据库角色设置为db_owner,否则无法访问其他用户(包括dbo用户)创建的对象.(企业管理器-> 用户,右键菜单 <属性> 中设置) :
2.使用所有者进行限定.
例如me访问you创建的testtable:
select * from you.testtable
另外,dbo用户作为管理员,系统赋予其所有的权限,可以调用任何用户创建的对象.
若某个数据库存在2个或2个以上的用户名,如果具有db_owner角色的用户在访问对象时省略了所有者,则系统先查找该用户的对象,若找不到则查找dbo用户是否有同名对象.例如:
select * from testtable 或
select * from pubs..testtable
实验:
l 创建登录名login_ibrahim
l 用此登录名登录“查询分析器”,发现只能查看系统自带的数据库,如master、Northwind、pubs等
l 将登录名login_ibrahim的服务器角色设置为Database Creator(若不设置此项,则无法创建数据库)
l 在“查询分析器”中输入create database test,然后执行,这会创建一个名为test的数据库
l 查看test数据库拥有的用户名,发现系统会自动创建了dbo和guest这两个用户名。其中dbo用户名对应的登录名为login_ibrahim,不能更改test数据库登录名login_ibrahim所对应的用户名dbo,此时test数据库的dbo用户名,其对应的登录名有两个,一个是login_ibrahim,另一个是sa(没想到吧^_^,因为sysadmin 固定服务器角色的成员会自动映射到 dbo。)
l 创建登录名login_ibrahim2,不设置任何服务器角色,将可访问数据库设置为test
l 打开test数据库的用户名列表,会发现系统会为登录名login_ibrahim2自动创建一个同名的用户名login_ibrahim2,然后再创建一个名为T_ibrahim的数据表
l 此时用login_ibrahim2登录SQLSERVER,发现不能在test数据库中创建表
l 用login_ibrahim登录SQLSERVER,为login_ibrahim2用户名授予对test数据的db_ddladmin权限
l 此时用login_ibrahim2登录SQLSERVER,发现可以创建数据表(创建名为T_ibrahim的数据表),并插入数据。
相关推荐
### SQL Server用户名与登录名的关系 #### 创建登录名与用户名 - 使用`sp_addlogin`存储过程创建登录名,例如:`EXEC sp_addlogin 'myLogin', 'myPassword', 'myDB'` - 使用`sp_adduser`存储过程将登录名映射为...
SQL SERVER数据库用户名和登录名的区别
在SQL Server中,修改用户名和密码是数据库管理的重要部分,特别是在确保数据安全性和遵循最佳实践时。本主题将深入探讨如何在SQL Server 2005中执行此操作,包括源代码实现。以下是对该过程的详细说明: 一、SQL ...
### SQL Server 数据库备份后登录名丢失问题及解决方法 #### 背景与问题概述 在进行SQL Server数据库的备份与恢复操作时,经常会出现一个棘手的问题:原本数据库中的登录名在恢复到另一台服务器后消失不见,导致...
2. **指定认证方式**:在新建登录对话框中选择“SQL Server Authentication”作为认证方式,并输入登录名和密码。 3. **设置默认数据库**:指定用户的默认数据库,避免每次登录时需要选择数据库。 4. **用户映射**:...
总结来说,正确管理和维护SQL Server 2000中的登录名与数据库用户名的关联是确保数据库正常运行的关键。在进行数据库恢复或迁移时,必须确保登录和用户之间的映射关系得以恢复,以避免孤立用户和访问权限问题。使用...
此外,可以在此处设定登录名在数据库中的权限,包括读、写等操作级别,甚至可以细化到列级别的权限控制,这体现了SQL Server 2005在权限管理上的灵活性和精确度。 - **步骤三:设置登录状态** 最后,在“状态”...
### SQL Server 2008 开启 sa 用户名和远程连接 #### 一、背景介绍 在使用 SQL Server 2008 数据库时,有时我们需要远程连接到服务器上进行管理和操作。默认情况下,SQL Server 2008 的 sa 帐户是禁用的,并且不...
登录名由SQL Server身份验证或Windows身份验证创建,用于连接到SQL Server实例;而数据库用户则是登录名在特定数据库中的映射,用于定义该用户可以访问哪些数据库对象以及具有哪些权限。当数据库迁移时,如果登录名...
SQL Server 是一个关系型数据库管理系统,它提供了多种身份验证机制来确保数据库的安全性。其中,SQL Server 验证是一种常用的身份验证方式,通过创建用户过程来实现身份验证。本文将详细介绍 SQL Server SQL 验证时...
### 如何在SQL Server 2008中设置sa登录名 #### 背景介绍 在使用SQL Server 2008时,有时需要通过sa(系统管理员)登录来进行数据库管理和维护工作。由于安全原因,默认情况下sa账号是被禁用的,并且数据库服务器...
- 在 SSMS 中,展开“安全性”节点,然后展开“登录名”。 - 右键单击“sa”账户,选择“属性”。 - 在“sa 属性”窗口中,转到“常规”选项卡。 - 在“密码”字段中输入新密码。 - 取消选中“强制执行密码策略...
简述microsoft-sql-server中登录名、角色,用户、架构之间的关系
### ADO连接SQL Server 2008 Express方法总结 #### 概述 在软件开发过程中,使用ADO(ActiveX Data Objects)连接SQL Server数据库是非常常见的需求之一。本文档主要介绍如何通过ADO来连接Microsoft SQL Server ...
1. **服务器名**:输入SQL Server实例的名称,可能是本地机器的".\SQLEXPRESS"或其他远程服务器。 2. **身份验证**:选择适当的认证方式,一般使用"Windows身份验证"或"SQL Server身份验证"。前者利用Windows账户...
标题 "kettle 连接sqlserver 驱动" 涉及到的是在数据集成工具 Pentaho Data Integration(简称 Kettle 或 PDI)中,如何配置和使用 SQL Server 数据库的连接。Kettle 是一个强大的ETL(Extract, Transform, Load)...
4. 配置连接信息:输入服务器名(通常是数据库所在的主机IP地址或域名),选择端口(默认为1433),输入数据库名称,登录用户名和密码。 5. 安装驱动:在"JDBC驱动"选项卡中,点击"添加"按钮,然后浏览到你解压后的...
SQL Server是一款由微软公司开发的关系型数据库管理系统,广泛应用于企业级的数据存储和管理。SQL Server提供了多种版本,其中免费版包括SQL Server 2019 Developer和SQL Server 2019 Express。开发者版本...
- 在“常规(General)”选项卡中输入登录名,例如“\DOMAIN\USERNAME”。 - 在“身份验证(Authentication)”中选择“Windows NT Authentication”。 - 在“默认数据库(Default Database)”中选择预设数据库。 - ...
总结,ifix ODBC配置SQL server涉及到的主要技术点包括SQL Server的安装和管理,ODBC数据源的创建,ifix报警服务的配置,以及利用T-SQL脚本来自动化数据库维护任务。这样的配置使得ifix能够有效地与SQL Server交互,...