一个登录名可以对应一个服务器中的不同数据库下的用户名
数据库和用户名 是一一对应的

select * from dba_tables t where t.owner=‘用户id’;
dba_tables: 是有权限的DBA

用户id: oracle用户名
有问题 一个登陆名 对应一个数据库 可以对用多个用户? 或者这里的用户理解为 schema?

假如我们想了解数据库中的user和schema的关系,首先必须要清楚数据库中的user和schema的概念。

  在sqlserver2000中,由于架构的原因,user和schema总有一层隐含的关系,让我们很少意识到其实user和schema是两种完全不同的概念,不过在sqlserver2005中这种架构被打破了,user和schema也被分开了。

  首先来做一个比喻,什么是database,schema,table,列,行,user?可以把database看作是一个大的仓库,仓库分了很多很多的房间,schema就是其中的房间,一个schema代表一个房间,table可以看作是每个schema中的床,table(床)就被放入每个房间中,不能放置在房间之外,那岂不是晚上睡觉无家可归啊。然后床上可以放置很多物品,好比table可以放置很多列和行一样,数据库中存储数据的基本单元是table,现实中每个仓库放置物品的基本单位就是床,user就是每个schema的主人,(所以schema包含的object,而不是user),其实user是对应与数据库的(即user是每个对应数据库的主人),既然有操作数据库的(仓库)的权利,就肯定有操作数据库中每个schema(房间)的权利,就是说每个数据库映射的user有每个schema(房间)的钥匙,换句话说,如果它是某个仓库的主人,那么这个仓库的使用权和仓库中的所有东西都是他的(包括房间),他有完全的操作权,可以扔掉不用的东西从每个房间,也可以放置一些有用的东西到某一个房间,这个现实中的相似,我还可以给user分配具体的权限,也就是他到某一房间能做些什么,是只能看(read-only),还是可以像主人一样有所有的控制权(r/w),这个就要看这个user所对应的角色role了。

  在sqlserver2000中,假如我们在某一数据库中创建了用户Bosco,那么此时后台也为我们默认的创建了schema【Bosco】,schema的名字和user的名字相同,这也是我们分不清用户和schema的原因。

  在sqlserver2005中,为了向后兼容,当你用sp_adduser存储过程创建一个用户的时候,sqlserver2005同时也创建了一个和用户名相同的schema,然而这个存储过程是为了向后兼容才保留的,我们应该逐渐熟悉用新的DDL语言create user和create schema来操作数据库,在sqlserver2005中,当我们用create user创建数据库用户时,我们可以用该用户指定一个已经存在的schema作为默认的schema,如果我们不指定,则该用户所默认的schema即为dbo schema,dbo房间(schema)好比一个大的公共房间,在当前登录用户没有默认schema的前提下,如果你在大仓库中进行一些操作,比如create table,如果没有制定特定的房间(schema),那么你的物品就只好放进公共的dbo房间(schema)了。但是如果当前登录用户有默认的schema,那么所做的一切操作都是在默认的schema上进行(比如当前登录用户为login1,该用户的默认schema为login1,那么所做的所以操作都是在这个login1默认schema上进行的。实验已经证明的确如此)。估计此时你会有一点晕,刚才说dbo是一个schema,但是你可以在数据库中查看到,dbo同事也是一个user,晕了吧。

  在sqlserver2005中创建一个数据库的时候,会有一些schema包括进去,被包括进去的schema有:dbo,INFORMATION_SCHEMA,guest,sys等等(还有一些角色schema)。

  在上文中已经提到了,在sqlserver2005中当用存储过程sp_adduser创建一个user时,同时sqlserver2005也为我们创建了一个默认的和用户名相同的schema,这个问题出来了,当我们create table a时,如果没有特定的schema做前缀,这个a表创建在了哪个schema上,即进入了哪个房间?答案是:

  1.如果当前操作数据库的用户(可以用select current_user查出来)有默认的schema(在创建用的时候指定了),那么表a被创建在了默认的schema上。

  2.如果当前操作数据库的用户没有默认的schema(即在创建user的时候默认为空),但是有一个和用户名同名的schema,那么表a照样被创建在了dbo schema上,即使有一个和用户名同名的schema存在,由于它不是该用户默认的schema,所以创建表的时候是不会考虑的,当作一般的schema来处理,别看名字相同,可是没有任何关系哦。

  3.如果在创建表a时候指定了特定的schema做前缀,则表a被创建在了指定的schema上(有权限吗?)

  现在问题又出来了,在当前操作数据库的用户(用select current_user可以查看到,再次强调)没有默认schema的前提下,当我们用create table a语句时,a表会去寻找dbo schema,并试图创建在dbo schema上,但是如果创建a表的用户只有对dbo schema的只读权限,而没有写的权限呢?这个时候a表既不是建立不成功,这个就是会提到的login,user,role和schema四者的关系,在这里,为了避免混淆和提高操作数据库的速度(在少量数据范围内,对我们肉眼来说几乎看不到差异),我们最好每次在操作数据库对象的时候都显式地指定特定的Schema最为前缀。

  现在如果登录的用户为Sue,该用户有一个默认Schema也为Sue,那么如果现在有一条查询语句为Select * from mytable, 那么搜寻每个房间(Schema)的顺序是怎样的呢?顺序如下:

  1. 首先搜寻sys.mytable (Sys Schema)

  2. 然后搜寻Sue.mytable (Default Schema)

  3. 最后搜寻 dbo.mytable (Dbo Schema)

  执行的顺序大家既然清楚了,那么以后在查询数据库表中的数据时,最好指定特定的Schema前缀,这样子,数据库就不用去扫描Sys Schema了,当然可以提高查询的速度了。

  另外需要提示一下的是,每个数据库在创建后,有4个Schema是必须的(删都删不掉),这4个Schema为:dbo,guest,sys和INFORMATION_SCHEMA,其余的Schema都可以删除。

数据库 user schema sqlserver 关系相关推荐

  1. mysql数据依赖关系_发现数据库对象的依赖关系

    SQL Server Management Studio中有一个很有意思的工具,可以查看某个对象的依赖和被依赖关系.如下图所示 假设,我们自己的程序也要实现这样的功能,那么该怎么做呢? 1. 首先,创 ...

  2. 数据库中Schema(模式)概念相关

    数据库中Schema有两种含义,一种是概念上的Schema,指的是一组DDL语句集,该语句集完整地描述了数据库的结构.还有一种是物理上的 Schema,指的是数据库中的一个名字空间,它包含一组表.视图 ...

  3. mysql one database_数据库中schema和database有什么区别?

    在MySQL中创建一个Schema好像就跟创建一个Database是一样的效果,在SQL Server和Orcal数据库中好像又不一样. 目前我只能理解,在mysql中 schema<==> ...

  4. access对比数据_七大数据库产品测评Sqlserver完美胜出,五大理由告诉你最好选择...

    虽说各家数据库产品大同小易,学会一家,其他家都可以很快上手,但和编程语言的选择一样,人的精力有限下,只能深入研究一家的产品.故在学习之前,认真去评估应该选择哪一家数据库学习,这样的时间也很值得,总比学 ...

  5. AI:几张图理清人工智能与机器学习、知识发现、数据挖掘、统计学、模式识别、神经计算学、数据库之间的暧昧关系

    AI:几张图理清人工智能与机器学习.知识发现.数据挖掘.统计学.模式识别.神经计算学.数据库之间的暧昧关系 目录 几张图理清人工智能与机器学习.知识发现.数据挖掘.统计学.模式识别.神经计算学.数据库 ...

  6. 微服务和数据库到底是什么关系?

    过去几年来,"微服务架构"这个术语持续火热,它描述了一种将软件应用程序设计为可独立部署的服务套件的特定方式.尽管这种架构风格没有确切的定义,但围绕业务能力,自动化部署,网点智能以及 ...

  7. 当且仅当函数依赖a→b在r上成立_数据库第06章关系数据理习题课.ppt

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbsp数据结构与算法 数据库第06章关系数据理习题课.ppt36页 本 ...

  8. 数据库 - 建模:实体关系图(ERD)

    数据库 - 建模:实体关系图(ERD) 草拟实体及其关系的常用方法. 我们来看一个公司数据库的例子 实体关系图 实体关系模型,也称为实体关系(ER)图,是实体(将成为您的表)及其相互关系的图形表示. ...

  9. 什么是数据库中的一对一关系?

    什么是数据建模中的一对一关系?如何在数据库中实现这种关系?本文中的示例将回答这些问题. 数据建模中的实体(表)之间有三种类型的关系: 一对多关系(也表示为 1:M). 多对多关系 (M:N). 一对一 ...

最新文章

  1. DataWorks功能实践速览 05——循环与遍历
  2. C和C++编程中static关键字的含义-修饰函数和变量
  3. IIS服务器SSL证书安装
  4. C#操作DataReader类
  5. windows无法移动修复此计算机,无法安装Windows 10移动创作者更新[修复] | MOS86
  6. Percona 成为 MariaDB 基金会铜牌赞助商
  7. 怎么在服务器跑sql文件,服务器mysql数据库如何运行脚本
  8. 数据-第17课-栈课后练习
  9. python打开工业相机_Windows上调试basler Gige接口工业相机并用Python,Opencv开发
  10. ios14.2越狱之后的一系列操作
  11. 英尺英寸和厘米的换算_英寸、英尺与厘米如何换算
  12. PHP代码审计入门学习过程
  13. Java soso移动大厅项目
  14. 用python画钢铁侠图片_Photoshop快速把钢铁侠图片转为素描水墨风格教程
  15. 计算机考研基本信息,复旦大学计算机考研基本信息
  16. 计算机系统数据保存期限,哪种存储器存储数据时间长?
  17. 你为什么学不好Python?
  18. 光储充一体化充电站_光储充一体化充电站有哪些好处
  19. [转] COM编程总结
  20. 互联网校招求职经历记录

热门文章

  1. 最优的去重处理——HashSet去重
  2. Java 多线程的基本方式
  3. 2022-2028年中国刨花板市场投资分析及前景预测报告(全卷)
  4. SpringCloud Alibaba微服务实战(三) - Nacos服务创建消费者(Feign)
  5. torch.backends.cudnn.deterministic 使用cuda保证每次结果一样
  6. 文件句柄和文件描述符的区别和理解指针
  7. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法
  8. eclipse中导入web项目详细配置
  9. 使用PCAST检测散度以比较GPU和CPU结果
  10. 地图构建两篇顶级论文解析