SQL Server 2012中的user和login

来源:互联网 发布:邪典电影 知乎 编辑:程序博客网 时间:2024/05/18 03:12

  SQL Server中既有user的概念,又有login的概念,两者很容易混淆。特别是对熟悉Oracle的用户迷惑性更大。在Oracle中我们只需要一个语句create user test identified by test;就完成了用户创建,然后做一些必要的授权如grant dba,resource,connect to test;我们就可以用test这个用户来访问和控制数据库了。但是在SQL Server里没有这么简单,首先必须先创建一个数据库,然后还需要新建一个login,还要在新建的数据库中创建一个供login使用的user,最后给这个user授权,如此这般我们才能用这个login连接并访问数据库。
  通过上面介绍可以看出login的主要工作就是用来登录数据库服务器,可以说是数据库服务器的通行证,没有login外界就无法和SQL Server服务器取得任何联系。但是使用login登上服务器之后我们没有任何访问和使用数据库的权限。对数据库服务器上的所有数据库来说这次的login只是一个guest访问,仅仅是过来看看,做不了任何实质性的工作。
  做不了任何工作的login对我们来说是没有任何作用的,那么如何让login工作起来呢?这时我们的user就拍上用场了。如果login想要访问某个数据库,首先需要管理员(sa)在这个数据库底下为其新建一个user,然后给这个user授权,这样login登陆时就可以使用这个user来访问这个数据库了。如果这个login还想访问其他的数据库,同样的需要管理员在想要访问的数据库底下为其新建并授权用户。
  说到这有的同学就要问了,为啥SQL Server要搞的这么复杂,直接让给login授权访问数据库不就可以了,为啥还要搞一个user,再通过user访问数据库?我觉得主要目的将服务器登录控制和数据库访问控制分离开。这样一来,login的修改不会影响数据中user对数据库的访问权限,数据库中user访问权限的改变同样不会对login的登录带来影响。

下面是一个SQL Server数据库的使用场景,

1, 使用sa用户或者windows用户登录服务器
2, 创建一个database 命名为db1,创建一个login账户log1,为log1在db1里创建一个user db_user,为db_user创建一个defualt schema,授权db_user建表和建视图的权限。

use mastercreate database db1;create login log1 with password='log1',check_policy=off;gouse db1create user db_user for login log1;gocreate schema db_schema authorization db_user;goalter user db_user with default_schema=db_schema;grant create table,create view to db_user;go

3, 这样我们就可以用log1登陆服务器操作数据库db1了。断开sa用户,用log1连上服务器并执行下面的sql

create table test_table(id int,name varchar(255));

这样我们就default schema “db_schema”下面创建了一个test_table的表了。

0 0
原创粉丝点击