Sql Server中的用户名和登录名
Sql Server中的用户名和登录名(或服务器账号)搞迷糊(如下图所示):
虽然用sa(登录名)就搞定一切东西了,当然这会存在一些安全隐患。
登录名
服务器方的一个实体,使用一个登录名只能进入服务器,但是不能让用户访问服务器中的数据库资源。每个登录名的定义存放在 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
Sql Server中的用户名和登录名相关推荐
- 替换SQL Server中Windows身份验证登陆名buildin\Administrator
以Administrator账户登陆服务器的人员,均可以以buildin\Administrator登陆数据库,并且拥有sysadmin最大权限.而能够使用Administrator登陆服务器可能包括 ...
- 使用DBATools PowerShell修复SQL Server中的孤立用户
This article gives an overview of Orphan users and fixing them using DBATools PowerShell. 本文概述了Orpha ...
- SQL Server中的登录触发器概述
This article gives you an overview of Logon triggers in SQL Server and its usage to control SQL Serv ...
- 如何修改 SQL Server 中的实例名 ?
在微软的社区也看到了这个问题: https://social.msdn.microsoft.com/Forums/en-US/c59b0840-1595-456a-b77e-d95b1a2a9097/ ...
- SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数
很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之前开发的系统要么因为历史原因用的是SQL2000要么根本用不着在SQL Server中启用CLR ...
- SQL Server中的KILL SPID命令
This article gives an overview of the KILL SPID command and how to monitor the rollback progress. 本文 ...
- 在AWS RDS SQL Server中进行审核
This article explores the server and database audit in AWS RDS SQL Server. 本文探讨了AWS RDS SQL Server中的 ...
- SQL Server 中的身份认证讲解
SQL Server 中的身份认证讲解TIME:2009-4-22 | READ:228 Microsoft® SQL Server™ 可以在两种安全(身份验证)模式之一下工作: Window ...
- SQL Server 2014 windows身份验证登录失败解决办法
网上大部分安装SQL Server教程里都默认选择的windows身份验证登录,没有设置sql server账号,因此初次登录时只能通过这一种方式登录,若windows身份验证也不通过,该如何解决呢. ...
最新文章
- Unix / Linux世界里的4-2-1
- Win10:你需要来自XXX的权限才能对此文件夹进行更改
- 每个网页设计师应该知道的10条CSS规则
- mysql空间扩展 VS PostGIS
- mysql8 允许外网访问
- 5.1.2 操作系统控制I/O设备的I/O控制器
- Vivado过程文件解释
- 联想服务器st系列,联想ThinkSystem ST50评测 一款超值的入门级服务器
- AD9中元件无法显示的问题解决
- 半导体物理学——(一)半导体中的电子状态
- 约瑟夫环问题java_Java求解约瑟夫环问题
- 手机号码11位以及格式验证规则
- 【小米集团】2019校招在线考试-算法试卷编程题
- 单目相机三维姿态解算
- Laravel OAuth2 (三) ---使用 services 和 facades
- CNN经典网络:LeNet、AlexNet、NIN、VGG
- 算法 - n个数字形成的圆圈中循环删除第m个数字(C++)
- P6专题:P6 EPPM和PPM基本概念
- 第十三周项目4—立体类族共有的抽象类
- SPSS常用的10种统计分析