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

来源:互联网 发布:访客网络怎么隐藏 编辑:程序博客网 时间:2024/05/17 11:59

1. 服务器登陆名,sa就是一个服务器登陆名。ConnectionString中的user="myloginname",myloginname就是你连接的数据库用户名,pwd="mypass",mypass是myloginname的密码.

新建一个登录名的时候,默认数据库是master(如果选择了,其他数据库,那么,其他数据库的数据库角色必须对应myloginname,否则报错),默认服务器角色是public,必选;用户映射的数据库为0个,所选数据库的(默认第一个)的数据库角色成员身份::数据库角色.默认勾选public,必选。

如果,添加登陆名的时候,用户映射那里,同时选择了一个数据库。并且该数据库的角色,勾选了db_ower或更高权限。那么SqlServer会自动给该数据库添加一个和登录名同名的数据库用户,隶属于登录名myloginname。(注意:删除登录名时候,不会删除和该登录名关联的用户。所以,当下一次创建同名登录名给相同数据库分配角色时候。SQL会自动给该数据库添加同名的数据库用户名,但是数据库的用户中,已经存在该用户名,所以,会报错。解决方案有2中,一,先删除数据库中的用户名,在添加,同时映射。或者二:先不要映射数据库,这样能添加成功。然后,在去数据库删除老用户名,重新添加,指向登录名myloginname)

 

2.服务器角色名:系统内置不可添加和修改,普通登录名默认public角色,sa(系统管理员sysadmin)默认public 和sysadmin

 由于固定服务器是在服务器层次上定义的,因此它们位于从属于数据库服务器的数据库外面。下表列出了所有现有的固定服务器角色

固定服务器角色

说    明

sysadmin

执行SQL Server中的任何动作

serveradmin

配置服务器设置

setupadmin

安装复制和管理扩展过程

securityadmin

管理登录和CREATE DATABASE的权限以及阅读审计

processadmin

管理SQL Server进程

dbcreator

创建和修改数据库

diskadmin

管理磁盘文件


下面两个系统过程用来添加或删除固定服务器角色成员:
sp_addsrvrolemember
sp_dropsrvrolemember
注意:您不能添加、修改或删除固定服务器角色。另外,只有固定服务器角色的成员才能执行上述两个系统过程来从角色中添加或删除登录账户。
 

2.1服务器角色作用是什么呢?

做过权限管理都知道,系统有n个权限。每个用户也有若干个权限。有很多系统职位的人的权限是一样的。那么如果每个用户分配权限,就会造成多余,因为可能1万个都是一样的权限,那么我们不需要分别给这一万个用户都分配权限,而是给一个角色分配权限,然后,这一万个用户,都属于这个角色就可以了。

 2.2服务器角色有哪些权限呢?

在某个SQL Server系统中,每个固定服务器角色都有其隐含的权限。使用系统过程sp_srvrolepermission可以浏览每个固定服务器角色的权限。该系统过程的语法形式为:  

sp_srvrolepermission[[@srvrolename =] 'role']  

如果没有指定role的值,那么所有的固定服务器角色的权限都将显示出来。每个固定服务器角色的权限暂略。

 
3.数据库用户:隶属于服务器登录名;属于某组数据库角色以获取操作数据库的权限

4.数据库角色

   固定数据库角色在数据库层上进行定义,因此它们存在于属于数据库服务器的每个数据库中。下表列出了所有的固定数据库角色。

  

 

 



除了上表中列出的固定数据库角色之外,还有一种特殊的固定数据库角色,名为public。   

public角色 

  public角色是一种特殊的固定数据库角色,数据库的每个合法用户都属于该角色。它为数据库中的用户提供了所有默认权限。这样就提供了一种机制,即给予那些没有适当权限的所有用户以一定的(通常是有限的)权限。public角色为数据库中的所有用户都保留了默认的权限,因此是不能被删除的。   一般情况下,public角色允许用户进行如下的操作:   

               使用某些系统过程查看并显示master数据库中的信息
               
执行一些不需要一些权限的语句(例如PRINT)   固定数据库角色及其权限 

  在数据库中,每个固定数据库角色都有其特定的权限。

这就意味着对于某个数据库来说,固定数据库角色的成员的权限是有限的。使用系统过程

sp_dbfixedrolepermission就可以查看每个固定数据库角色的权限。该系统过程的语法为:  

sp_db.xedrolepermission [[@rolename =] 'role']   

如果没有指定role的值,那么所有固定数据库角色的权限都可以显示出来。


5.数据库架

 

以下是引用,原文:http://mybloggers.blog.163.com/blog/static/100386509201132654117739/:

今天我们要说的包括服务器登录名Server Login,服务器角色Server Role,数据库用户DB User,数据库架构DB Schema,数据库角色DB Role 。以上几个名词应该从服务器与数据库来区分,服务器包含一到多个数据库,其中:

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

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

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

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

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

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

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

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

    

即:

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

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

1、新建登录名Login1

 

2、新建数据库DB1

 

3、新建DB1的架构Schema1

 

4、新建BD1的用户User1,登录名对应Login1,默认架构选择Schema1,角色选择db_owner

 

5、在登录名Login1的属性窗口里选择“用户映射”,勾选DB1,在用户里填写User1,默认架构选择"Schema1"

 

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

 

 

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

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

0 0
原创粉丝点击