1. 程式人生 > >SQLServer修改登陸賬戶資訊

SQLServer修改登陸賬戶資訊

修改登陸賬戶資訊注意事項

如果 CHECK_POLICY設定為ON,則無法使用 HASHED引數。

如果 CHECK_POLICY更改為ON,則將出現以下行為:

  • 用當前的密碼雜湊值初始化密碼歷史記錄。

    如果 CHECK_POLICY 更改為 OFF,則將出現以下行為:

  • CHECK_EXPIRATION 也設定為 OFF。

  • 清除密碼歷史記錄。

  • 重置 lockout_time 的值。

如果指定MUST_CHANGE,則CHECK_EXPIRATION和CHECK_POLICY必須設定為ON。 否則,該語句將失敗。

如果CHECK_POLICY設定為OFF,則CHECK_EXPIRATION不能設定為ON。 包含此選項組合的 ALTER LOGIN 語句將失敗。

不能使用帶DISABLE 引數的ALTER_LOGIN來拒絕對Windows 組的訪問。 例如,ALTER_LOGIN [domain\group] DISABLE將返回下列錯誤資訊:

"訊息 15151,級別 16,狀態 1,第 1 行"

"無法更改登入名 'Domain\Group',因為它不存在,或者你沒有相應許可權。"

這是設計的結果。

SQL Database中,對連線和伺服器級別的防火牆規則進行身份驗證時所需的登入資料會暫時快取在每個資料庫中。 此快取定期重新整理。 若要強制重新整理身份驗證快取並確保資料庫具有最新版本的登入名錶,請執行DBCC FLUSHAUTHCACHE (Transact-SQL)。

需要ALTER ANY LOGIN許可權。

如果使用CREDENTIAL選項,則還需要ALTER ANY CREDENTIAL許可權。

如果正在更改的登入名是sysadmin固定伺服器角色的成員或CONTROL SERVER許可權的被授權者,則進行以下更改時還需要CONTROL SERVER許可權:

  • 在不提供舊密碼的情況下重置密碼。

  • 啟用MUST_CHANGE、CHECK_POLICY或CHECK_EXPIRATION。

  • 更改登入名。

  • 啟用或禁用登入名。

  • 將登入名對映到其他憑據。

    主體可更改用於自身登入的密碼、預設語言以及預設資料庫。

使用SSMS資料庫管理工具修改登陸賬戶資訊

1、連線資料庫-》展開安全性-》展開登陸名-》選擇要修改的登陸賬戶-》右鍵點選-》選擇屬性。

2、在登陸屬性彈出框-》點選常規-》修改登陸名、密碼、證書、對映到憑據、預設資料庫、語言等。

3、在登陸屬性彈出框-》點選伺服器角色-》修改伺服器角色(資料庫角色指定了可以訪問相同資料庫物件的一組資料庫使用者)。

4、在登陸屬性彈出框-》點選伺服器角色-》修改使用者對映(登入名用於授權並訪問伺服器資源,如果需要訪問資料庫,需要對資料庫內部的使用者進行對映。使用者是資料庫級別的安全主體,訪問資料庫資源是授予給使用者,而不是登入名。)。

5、在登陸屬性彈出框-》點選安全物件-》修改資料庫安全物件和安全物件許可權(安全物件,是SQL Server 資料庫引擎授權系統控制對其進行訪問的資源。通俗點說,就是在SQL Server許可權體系下控制的物件,因為所有的物件(從伺服器,到表,到檢視觸發器等)都在SQL Server的許可權體系控制之下,所以在SQL Server中的任何物件都可以被稱為安全物件)。

6、在登陸屬性彈出框-》點選狀態-》修改登陸賬戶狀態(禁用使用者登陸或者連線資料庫)。

使用T-SQL指令碼修改登陸賬戶資訊

啟用或禁用此登入名

語法

--宣告資料庫引用
use database_name;
go

--建立登入使用者
alter login login_name { enable | disable }
go

語法解析

--database_name
--資料庫名
--login_name
--指定正在更改的SQL Server登入名的名稱。 域登入名必須用方括號括起來,其格式為[domain\user]。
--enable | disable
--啟用或禁用此登入名。 禁用登入名不會影響已連線登入名的行為。
--(使用 KILL 語句終止現有連線。)禁用的登入名將保留它們的許可權,且仍然可以模擬。

示例

--宣告資料庫引用
use testss;
go

--建立登入使用者
alter login testuser
disable 
go

示例結果

更改登入帳戶的屬性

語法

--宣告資料庫引用
use database_name;
go

--修改登入賬戶屬性
alter login login_name  
with 
password={ 'password' | hashed_password hashed [old_password='oldpassword' [must_change | unlock] ]}[,]
default_database=database[,]  
default_language=language[,]
name=login_name[,]  
check_policy={ on | off }[,]  
check_expiration={ on | off }[,] 
credential=credential_name[,]  
no credential[,]
add credential credential_name[,]  
drop credential credential_name     

語法解析

--database_name
--資料庫名稱

--login_name
--指定正在更改的SQL Server登入名的名稱。 域登入名必須用方括號括起來,其格式為 [domain\user]。

--password='password*'
--僅適用於SQL Server登入名。指定正在更改的登入名的密碼。密碼是區分大小寫的。
--與SQL資料庫持續保持活動連線需要至少每隔10小時進行重新授權(由資料庫引擎執行)。
--資料庫引擎使用最初提交的密碼嘗試重新授權,且無需使用者輸入。出於效能原因,在SQL資料庫中重置密碼時,連線將不會重新進行身份驗證,即使該連線因連線池而重置。
--這與本地SQLServer的行為不同。如果自最初授權連線時已更改密碼,則必須終止連線,並使用新密碼建立新連線。具有KILL DATABASE CONNECTION許可權的使用者可使用KILL命令,顯式終止與SQL資料庫的連線。

--password=hashed_password
--僅適用於HASHED關鍵字。指定要建立的登入名的密碼的雜湊值。
--hashed
--僅適用於SQL Server登入名。 指定在PASSWORD引數後輸入的密碼已經過雜湊運算。
--如果未選擇此選項,則在將密碼儲存到資料庫之前,對其進行雜湊運算。此選項只能用於在兩臺伺服器之間同步登入名。 切勿使用HASHED選項定期更改密碼。
--old _password='oldpassword'
--僅適用於SQL Server登入名。要指派新密碼的登入的當前密碼。密碼是區分大小寫的。

--must_change
--適用範圍: SQL Server 2008 到 SQL Server 2017、並行資料倉庫。
--僅適用於SQL Server 登入名。 如果包括此選項,則SQL Server將在首次使用已更改的登入名時提示輸入更新的密碼。

--unlock
--適用範圍:SQL Server 2008到SQL Server 2017、並行資料倉庫。
--僅適用於SQL Server登入名。 指定應解鎖被鎖定的登入名。

--default_database=database
--適用範圍:SQL Server 2008到SQL Server 2017。
--指定將指派給登入名的預設資料庫。

--default_language=language
--適用範圍: SQL Server 2008 到 SQL Server 2017。
--指定將指派給登入名的預設語言。 所有SQL資料庫登入名的預設語言為英語,並且無法更改。
--Linux上SQL Server的sa登入名的預設語言是英語,但可以更改。

--name=login_name
--正在重新命名的登入的新名稱。
--如果是Windows登入,則與新名稱對應的Windows主體的SID必須匹配與SQL Server中的登入相關聯的SID。
--SQL Server登入名的新名稱不能包含反斜槓字元 (\)

--check_expiration={ on | off }
--適用範圍:SQL Server 2008到SQL Server 2017、並行資料倉庫。
--僅適用於SQL Server登入名。指定是否應對此登入帳戶強制實施密碼過期策略。預設值為OFF。

--check_policy={ on | off }
--適用範圍:SQL Server 2008到SQL Server 2017、並行資料倉庫。
--僅適用於SQL Server登入名。指定應對此登入名強制實施執行SQL Server的計算機的Windows密碼策略。 預設值為ON。

--credential=credential_name
--適用範圍:SQL Server 2008到SQL Server 2017。
--將對映到SQL Server登入的憑據的名稱。該憑據必須已存在於伺服器中。
--有關詳細資訊,請參閱憑據(資料庫引擎)。憑據不能對映到sa登入名。

--no credential
--適用範圍:SQL Server 2008到SQL Server 2017。
--刪除登入到伺服器憑據的當前所有對映。

--add credential
--適用範圍:SQL Server 2008到SQL Server 2017。
--將可擴充套件的金鑰管理 (EKM) 提供程式憑據新增到登入名。有關詳細資訊,請參閱可擴充套件的金鑰管理(EKM)。

--drop credentiil
--適用範圍:SQL Server 2008到SQL Server 2017。
--從登入名刪除可擴充套件金鑰管理 (EKM) 提供程式憑據。有關詳細資訊,請參閱可擴充套件的金鑰管理(EKM)。

示例

--宣告資料庫引用
use testss;
go

--修改登陸賬戶屬性
alter login testuser  
with 
password='1234',
--default_database=database[,]  
--default_language=language[,]
name=testuser,  
check_policy=on,
check_expiration=on 
--credential=credential_name  [,]
--no credential[,]
--add credential credential_name[,]  
--drop credential credential_name    

--可以新增多個伺服器角色
--建立伺服器角色, 伺服器角色用於向用戶授權伺服器範圍內的安全特權
--alter server role [bulkadmin] drop member [testuser];
--go
--alter server role [dbcreator] drop member [testuser];
--go
--alter server role [diskadmin] drop member [testuser];
--go
--alter server role [processadmin] drop member [testuser];
--go
--alter server role [securityadmin] drop member [testuser];
--go
--alter server role [serveradmin] drop member [testuser];
--go
--alter server role [setupadmin] drop member [testuser];
--go
--alter server role [sysadmin] drop member [testuser];
--go


--建立使用者對映,對映到此登入名的使用者
--use [master]
--go
--drop user [testuser]
--go

--use [msdb]
--go
--drop user [testuser]
--go

--use [ReportServer]
--go
--drop user [testuser]
--go

--use [ReportServerTempDB]
--go
--drop user [testuser]
--go

--use [tempdb]
--go
--drop user [testuser]
--go

--use [testss]
--go
--drop user [testuser]
--go


----宣告資料庫引用
--use [testss]
--go

----授予不安全的程式集
--grant unsafe assembly to testuser;
--go

----授予檢視伺服器狀態
--grant view server state to testuser;
--go

----授予檢視任意定義
--grant view any definttion to testuser;
--go

----授予檢視任意資料庫
--grant view any database to testuser;
--go

----授予建立DDL事件通知
--grant create ddl event notification to testuser;
--go

----授予建立端點
--grant create endpoint to testuser;
--go

----授予建立伺服器角色
--grant create server role to testuser;
--go

----授予建立跟蹤事件通知
--grant create trace event notification to testuser;
--go

----授予建立可用性組
--grant create availability group to testuser;
--go

----授予建立任意資料庫
--grant create any database to testuser;
--go

----授予更改伺服器狀態
--grant alter server state to testuser;
--go

----授予更改跟蹤
--grant alter trace to testuser;
--go

----授予更改任何伺服器角色
--grant alter any server role to testuser;
--go

----授予更改任何可用性組
--grant alter any availability group to testuser;
--go

----授予更改任意登入名
--grant alter any login to testuser;
--go

----授予更改任意端點
--grant alter any endpoint to testuser;
--go

----授予更改任意伺服器稽核
--grant alter any server audit to testuser;
--go

----授予更改任意許可權
--grant alter any connection to testuser;
--go

----授予更改任意連線伺服器
--grant alter any linked server to testuser;
--go

----授予更改任意憑據
--grant alter any credential to testuser;
--go

----授予更改任意事件會話
--grant alter any event session to testuser;
--go

----授予更改任意事件通知
--grant alter any event notification to testuser;
--go

----授予更改任意資料庫
--grant alter any database to testuser;
--go

----授予更改設定
--grant alter settings to testuser;
--go

----授予更改資源
--grant alter resources to testuser;
--go

----授予關閉
--grant shutdown to testuser;
--go

----授予管理大容量操作
--grant administer bulk operations to testuser;
--go

----授予控制伺服器
--grant control server to testuser;
--go

----授予連線SQL
--grant connect sql to testuser;
--go

----授予外部訪問程式集
--grant external access assembly to testuser;
--go

----授予驗證伺服器
--grant authenticate server to testuser;
--go

--設定是否允許連線到資料庫引擎
--deny connect sql to testuser;
--go  
--是否允許登入
--alter login testuser disable;
--go


----使用者狀態
----宣告預設資料庫引用
--use [testuser]
--go
----是否允許使用者連線到資料庫引擎
--deny connect sql to [testuser];
--go
----是否允許登入
--alter login [testuser] { enable | disable }
--go

示例結果