SQL Server 2012中的user和login

  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 master
create database db1;
create login log1 with password='log1',check_policy=off;
go
use db1
create user db_user for login log1;
go
create schema db_schema authorization db_user;
go
alter 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的表了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章