欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQL SERVER服务器登录名、角色、数据库用户、角色、架构的关系

程序员文章站 2022-04-14 11:06:05
原创链接:https://www.cnblogs.com/junfly/articles/2798023.html SQL SERVER 基础教程中关于服务器登录名、服务器角色、数据库用户、数据库角色、架构的关系。 我们要说的包括服务器登录名Server Login,服务器角色Server Role ......

原创链接:

 sql server 基础教程中关于服务器登录名、服务器角色、数据库用户、数据库角色、架构的关系。

我们要说的包括服务器登录名server login,服务器角色server role,数据库用户db user,数据库架构db schema,数据库角色db role 。以上几个名词应该从服务器与数据库来区分,服务器包含一到多个数据库,其中:

服务器登录名,指有权限登录到某服务器的用户;

服务器角色,指一组固定的服务器用户,默认有9组;

  • 登录名一定属于某些角色,默认为public
  • 服务器角色不容许更改
  • 登录后也不一定有权限操作数据库

数据库用户,指有权限能操作数据库的用户;

数据库角色,指一组固定的有某些权限的数据库角色;

数据库架构,指数据库对象的容器;

  • 数据库用户对应于服务器登录名以便登录者可以操作数据库
  • 数据库角色可以添加,可以定制不同权限  
  • 数据库架构,类似于数据库对象的命名空间,用户通过架构访问数据库对象

而通过下图可以让这些概念清晰一些:

    SQL SERVER服务器登录名、角色、数据库用户、角色、架构的关系

即:

  1. 服务器登录名属于某组服务器角色;
  2. 服务器登录名需要于数据库的用户映射后才拥有操作数据库的权限
  3. 数据库用户属于某组数据库角色以获取操作数据库的权限
  4. 数据库角色拥有对应的数据库架构,数据库用户可以通过角色直接拥有架构
  5. 数据库用户有默认架构,写sql语句可以直接以“对象名”访问
  6. 非默认架构则要以“架构名.对象名”访问

因此,新建一个非sa账户并建立数据库的过程可以如下:

1、新建登录名login1
SQL SERVER服务器登录名、角色、数据库用户、角色、架构的关系

2、新建数据库db1

SQL SERVER服务器登录名、角色、数据库用户、角色、架构的关系

3、新建db1的架构schema1

 

使用 sql server management studio 创建架构

  1. 在 sql server management studio 中,打开对象资源管理器,然后展开“数据库”文件夹。

  2. 展开要在其中创建新数据库架构的数据库。

  3. 右键单击“安全性”文件夹,指向“新建”,然后单击“架构”。

  4. “常规”页上的“架构名称”框中输入新架构的名称。

  5. “架构所有者”框中,输入要拥有该架构的数据库用户或角色的名称。

  6.  单击“确定”。

SQL SERVER服务器登录名、角色、数据库用户、角色、架构的关系

4、新建bd1的用户user1,登录名对应login1,默认架构选择schema1,角色选择db_owner

使用 sql server management studio 创建用户

  1. 在 sql server management studio 中,打开对象资源管理器,然后展开“数据库”文件夹。

  2. 展开要在其中创建新数据库架构的数据库。

  3. 右键单击“安全性”文件夹,指向“新建”,然后单击“用户”。

  4. “常规”页上的“用户名”框中输入”用户名“。

  5. 选择登录名 如下图
  6. 选择默认的建构 如下图
  7. 单击“确定”。           

SQL SERVER服务器登录名、角色、数据库用户、角色、架构的关系

5、在登录名login1的属性窗口里选择“用户映射”,勾选db1,在用户里填写user1,默认架构选择"schema1"

SQL SERVER服务器登录名、角色、数据库用户、角色、架构的关系

6、至此,新建表名会是schema1.table1,其他对象也如此

SQL SERVER服务器登录名、角色、数据库用户、角色、架构的关系

SQL SERVER服务器登录名、角色、数据库用户、角色、架构的关系

7、当然还可以新建其他架构的对象schema2,只有user1拥有该架构,一样可以访问,如schema2.table2

值得注意的是,当为登录映射数据库用户的时候,多个数据库可以有相同名称的用户,而单独为某个数据库新建的用户,如user1,则在其他数据库里不允许同名。