校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > SQL Server正確刪除Windows認證用戶的方法

SQL Server正確刪除Windows認證用戶的方法

熱門標簽:百度地圖標注不同路線 優質地圖標注 京華物流公司地圖標注 外呼系統電銷專用 智能語音外呼系統選哪家 武漢長沙外呼系統方法和技巧 奧威地圖標注多個地方 千呼電銷機器人價格 怎樣在地圖上標注路線圖標

前言

在SQL Server數據庫中,有時候會建立一些Windows認證的賬號(域賬號),例如,我們公司習慣給開發人員和Support同事開通NT賬號權限,如果有離職或負責事宜變更的話,那么要如何正確的刪除這些Windows認證賬號呢?這篇文章就是來探討一下如何正確的刪除Windows認證賬號。如下所示:

下面這種方式,僅僅是刪除登錄名(login),然而并沒有刪除用戶(User)

USE [master]
GO

DROP LOGIN [xxx\xxxx]
GO

你刪除登錄名的時候,就會遇到類似下面的告警信息:

Deleting server logins does not delete the database users associated with the logins. To complete the process, delete the users in each database. It may be necessary to first transfer the ownership of schemas to new users.

也就是說,雖然你刪除了登錄名,但是對應用戶數據庫或系統數據庫相關的User權限并沒有清理,在SQL Server中登錄名(Server Login)跟數據庫的用戶(database User)是分離開來,但是又有關聯的。所以正確的姿勢: 在刪除登錄名(login)后,還必須去每個數據庫,刪除對應的用戶(user). 在刪除登錄名前必須檢查,有那些作業的OWNER或數據庫的OWNER的為該Windows認證賬號(NT賬號),否則后面就會遇到一些問題:

1:如果刪除Windows認證用戶前,沒有修改作業的OWNER(如果此作業的OWNER為此Windows用戶的話,那么刪除Windows認證用戶后,作業就會報類似下面這種錯誤。

The job failed. The owner (xx\xxx) of job syspolicy_purge_history does not have server access.

所以在刪除Windows認證用戶前,必須檢查并修改作業的Owner,避免這種情況出現。

2:刪除Windows認證用戶前,確認是否有數據庫的OWNER為此Windows認證用戶。否則刪除登錄名時會報錯

Msg 15174, Level 16, State 1, Line 4

Login 'xxx\xxxx' owns one or more database(s). Change the owner of the database(s) before dropping the login.

Msg 15174, Level 16, State 1, Line 4

登錄名 'xxx\xxx' 擁有一個或多個數據庫。在刪除該登錄名之前,請更改相應數據庫的所有者。

必須修改數據庫的Owner后(一般將數據庫的owner改為sa),才能刪除登錄名

sp_changedbowner 'sa'

3:有時候刪除用戶時,報下面錯誤,必須修改后,才能刪除對應的用戶。

遇到下面錯誤:

Msg 15138, Level 16, State 1, Line 3

數據庫主體在該數據庫中擁有 架構,無法刪除。

Msg 15138, Level 16, State 1, Line 3

The database principal owns a schema in the database, and cannot be dropped.

USE YourSQLDba;

GO

ALTER AUTHORIZATION ON SCHEMA::[db_owner] TO [dbo];

USE [YourSQLDba]

GO

DROP USER [xxx\konglb];

GO

當然要根據實際情況來處理

USE [UserDatabase];

GO

ALTER AUTHORIZATION ON SCHEMA::[xxx] TO [dbo];

另外一種是用戶創建的Schema,這個根上面情況沒有差別。

所以正確的刪除登錄名,可以用腳本生成對應的SQL(當然也可以執行對應的SQL,但是這種高位操作,建議生成腳本,人工判斷后,手工執行)

DECLARE @login_name sysname;
SET @login_name='GFG1\chenzhenh'

SELECT d.name AS database_name,
owner_sid AS owner_sid ,
l.name AS database_owner
FROM sys.databases d
LEFT JOIN sys.syslogins l ON l.sid = d.owner_sid
WHERE l.name=@login_name;



SELECT 'USE ' + d.name + CHAR(10) 
+ 'GO' + CHAR(10)
+ 'EXEC dbo.sp_changedbowner @loginame =N''sa'', @map = false' AS change_db_owner_cmd
FROM sys.databases d
LEFT JOIN sys.syslogins l ON l.sid = d.owner_sid
WHERE l.name = @login_name;


SELECT j.job_id AS JOB_ID 
,j.name AS JOB_NAME 
,CASE WHEN [enabled] =1 THEN 'Enabled'
ELSE 'Disabled' END AS JOB_ENABLED 
,l.name AS JOB_OWNER 
,j.category_id AS JOB_CATEGORY_ID
,c.name AS JOB_CATEGORY_NAME
,[description] AS JOB_DESCRIPTION 
,date_created AS DATE_CREATED 
,date_modified AS DATE_MODIFIED
FROM msdb.dbo.sysjobs j
INNER JOIN msdb.dbo.syscategories c ON j.category_id = c.category_id
INNER JOIN sys.syslogins l ON l.sid = j.owner_sid
WHERE l.name= @login_name
ORDER BY j.name



DECLARE @job_owner NVARCHAR(32);

SET @job_owner='sa';

SELECT 'EXEC msdb.dbo.sp_update_job @job_name=N''' +j.name + ''', @owner_login_name=N''' + RTRIM(LTRIM(@job_owner)) + ''';' AS change_job_owner_cmd
FROM msdb.dbo.sysjobs j
INNER JOIN msdb.dbo.syscategories c ON j.category_id = c.category_id
INNER JOIN sys.syslogins l ON l.sid = j.owner_sid
WHERE l.name = @login_name
ORDER BY j.name


SELECT '
USE [master]
GO
DROP LOGIN ' + QUOTENAME(@login_name) + 
'
GO
' AS drop_login_user;

然后刪除用戶(User),此腳本也可以清理那些登錄名已經刪除,但是對應的USER沒有清理的Windows 認證用戶。此腳本可能有一些邏輯上的Bug,個人也是fix掉了一些Bug后,才發布這篇博客。如果遇到什么Bug,可以留言反饋。

DECLARE @database_id INT;
DECLARE @database_name sysname;
DECLARE @cmdText NVARCHAR(MAX);
DECLARE @prc_text NVARCHAR(MAX);
DECLARE @RowIndex INT;
DECLARE @user_name NVARCHAR(128);


IF OBJECT_ID('TempDB.dbo.#databases') IS NOT NULL
DROP TABLE dbo.#databases;

CREATE TABLE #databases
(
database_id INT,
database_name sysname
)


INSERT INTO #databases
SELECT database_id ,
name
FROM sys.databases
WHERE name NOT IN ( 'master', 'tempdb', 'model', 'msdb',
'distribution', 'ReportServer',
'ReportServerTempDB', 'YourSQLDba' )
AND state = 0; --state_desc=ONLINE 


CREATE TABLE #removed_user
(
username sysname
)

--開始循環每一個用戶數據庫(排除了上面相關數據庫)
WHILE 1= 1
BEGIN


SELECT TOP 1 @database_name= database_name 
FROM #databases
ORDER BY database_id;

IF @@ROWCOUNT =0 
BREAK;


SET @cmdText = 'USE ' + @database_name + ';' +CHAR(10)

SELECT @cmdText += 'INSERT INTO #removed_user
SELECT name FROM sys.sysusers
WHERE sid NOT IN (SELECT sid FROM sys.syslogins WHERE isntname=1 AND name LIKE ''GFG1%'')
AND isntname=1 AND name NOT IN (''NT AUTHORITY\SYSTEM'')' + CHAR(10);

EXEC SP_EXECUTESQL @cmdText

SELECT @database_name AS database_name;

SELECT j.job_id AS JOB_ID 
,j.name AS JOB_NAME 
,CASE WHEN [enabled] =1 THEN 'Enabled'
ELSE 'Disabled' END AS JOB_ENABLED 
,l.name AS JOB_OWNER 
,j.category_id AS JOB_CATEGORY_ID
,c.name AS JOB_CATEGORY_NAME
,[description] AS JOB_DESCRIPTION 
,date_created AS DATE_CREATED 
,date_modified AS DATE_MODIFIED
FROM msdb.dbo.sysjobs j
INNER JOIN msdb.dbo.syscategories c ON j.category_id = c.category_id
INNER JOIN sys.syslogins l ON l.sid = j.owner_sid
INNER JOIN #removed_user r ON l.name = r.username
ORDER BY j.name;


SELECT d.name AS database_name ,
l.name AS database_owner ,
d.create_date AS create_date ,
d.collation_name AS collcation_name ,
d.state_desc AS state_desc
FROM sys.databases d
INNER JOIN sys.syslogins l ON d.owner_sid = l.sid
INNER JOIN #removed_user r ON r.username = l.name


SET @cmdText = 'USE ' + @database_name + ';' +CHAR(10)

SET @cmdText += 'SELECT * FROM sys.schemas s
INNER JOIN #removed_user r ON s.name =r.username Collate Database_Default' + CHAR(10);

EXEC SP_EXECUTESQL @cmdText;


SET @cmdText = 'USE ' + @database_name + ';' +CHAR(10)

SET @cmdText += 'SELECT * FROM sys.objects WHERE schema_id IN (SELECT s.schema_id FROM sys.schemas s INNER JOIN #removed_user r ON s.name =r.username Collate Database_Default);'

EXEC SP_EXECUTESQL @cmdText;

SET @cmdText = 'USE ' + @database_name + ';' +CHAR(10)
SET @cmdText += 'SELECT ''USE ' + @database_name + ';'' + CHAR(10) +''GO'' + CHAR(10) +''ALTER AUTHORIZATION ON SCHEMA::'' +QUOTENAME(s.name) +'' TO [dbo];'' AS change_schema_cmd FROM sys.schemas s
INNER JOIN #removed_user r ON s.name =r.username Collate Database_Default ' + CHAR(10);

EXEC SP_EXECUTESQL @cmdText, N'@database_name sysname',@database_name ;

SET @cmdText = 'USE ' + @database_name + ';' +CHAR(10)
SET @cmdText += 'SELECT ''USE ' + @database_name + ';'' + CHAR(10) +''GO'' + CHAR(10) +''ALTER AUTHORIZATION ON SCHEMA::'' +QUOTENAME(s.SCHEMA_NAME) +'' TO [dbo];'' AS change_schema_cmd
FROM INFORMATION_SCHEMA.SCHEMATA s
INNER JOIN #removed_user r ON s.SCHEMA_OWNER =r.username Collate Database_Default' + CHAR(10);

EXEC SP_EXECUTESQL @cmdText, N'@database_name sysname',@database_name ;

SELECT 'USE ' + QUOTENAME(@database_name) + CHAR(10)
+ 'GO ' + CHAR(10)
+ 'DROP USER ' + QUOTENAME(username) +';' + CHAR(10)
+ 'GO' AS drop_user_cmd
FROM #removed_user;


TRUNCATE TABLE #removed_user;


DELETE FROM #databases WHERE database_name=@database_name;

END

DROP TABLE #databases;
DROP TABLE #removed_user;

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • SQL Server中identity(自增)的用法詳解
  • Sql Server中清空所有數據表中的記錄
  • SQL server 自增ID--序號自動增加的字段操作
  • SQL Server重置IDENTITY屬性種子值操作

標簽:防疫戰設 宿州 天水 來賓 威海 七臺河 銅仁 益陽

巨人網絡通訊聲明:本文標題《SQL Server正確刪除Windows認證用戶的方法》,本文關鍵詞  SQL,Server,正確,刪除,Windows,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQL Server正確刪除Windows認證用戶的方法》相關的同類信息!
  • 本頁收集關于SQL Server正確刪除Windows認證用戶的方法的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    无码av中文一区二区三区桃花岛| 国内精品写真在线观看| 国产精品嫩草影院com| 久久亚洲二区三区| www国产成人| 久久久蜜桃精品| 国产女主播一区| 国产精品沙发午睡系列990531| 中文字幕精品三区| 国产精品九色蝌蚪自拍| 亚洲欧美日韩成人高清在线一区| 亚洲色大成网站www久久九九| 亚洲精选视频在线| 亚洲国产精品人人做人人爽| 视频在线观看国产精品| 日本中文字幕一区二区视频| 麻豆国产欧美日韩综合精品二区| 美女国产一区二区| 国产精品一区二区在线观看不卡| 丁香婷婷深情五月亚洲| 91蜜桃在线免费视频| 欧美中文一区二区三区| 欧美精品亚洲二区| 日韩欧美二区三区| 国产精品天美传媒| 亚洲最新视频在线观看| 婷婷国产v国产偷v亚洲高清| 久久99精品久久久久| 国产69精品久久久久777| 日本黄色一区二区| 日韩一区二区精品在线观看| 国产午夜精品福利| 亚洲乱码国产乱码精品精98午夜 | 国内外精品视频| 成人性生交大片免费看中文网站| 91丨porny丨蝌蚪视频| 欧美日韩一区三区四区| 2020国产精品自拍| 亚洲嫩草精品久久| 日本强好片久久久久久aaa| 粉嫩蜜臀av国产精品网站| 欧美亚洲精品一区| 2024国产精品| 亚洲在线免费播放| 国产一区二区三区高清播放| 色婷婷综合激情| 日韩理论片网站| 日韩主播视频在线| 精品88久久久久88久久久| 国产一区二区三区最好精华液| 久久99精品久久久久久动态图| 成人激情av网| 4438x亚洲最大成人网| 久久久亚洲午夜电影| 亚洲一区二区精品视频| 国产精品一二一区| 欧美精品123区| 国产精品黄色在线观看| 麻豆精品国产91久久久久久| 91香蕉视频mp4| 久久久久久97三级| 五月天国产精品| 99re热视频精品| 久久久国产精华| 日本视频免费一区| 欧美亚洲愉拍一区二区| 中文字幕 久热精品 视频在线 | 午夜精品一区在线观看| 丰满白嫩尤物一区二区| 日韩视频免费直播| 亚洲永久免费视频| 成人激情黄色小说| 精品福利二区三区| 日韩专区一卡二卡| 欧美午夜精品久久久久久孕妇 | 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产一区在线不卡| 欧美麻豆精品久久久久久| 中文字幕日本乱码精品影院| 狠狠色狠狠色综合| 欧美一区二区成人6969| 亚洲卡通动漫在线| 99久久精品国产一区| 国产日韩欧美a| 国产一区美女在线| 欧美一级高清片| 日韩av一区二| 欧美日韩国产一二三| 亚洲欧美一区二区久久| 成人免费不卡视频| 26uuu欧美| 经典三级视频一区| 日韩欧美久久久| 欧美aaaaa成人免费观看视频| 欧美剧在线免费观看网站| 一区二区三区不卡在线观看 | 精品国产乱子伦一区| 日韩不卡免费视频| 中文字幕制服丝袜成人av| 天天爽夜夜爽夜夜爽精品视频| 99久久国产综合精品女不卡| 国产欧美一区二区精品秋霞影院| 国精产品一区一区三区mba桃花 | 9191成人精品久久| 天堂va蜜桃一区二区三区| 欧美午夜片在线观看| 亚洲一区二区在线免费观看视频| 日韩欧美黄色影院| 日韩福利电影在线| 日韩一级黄色片| 麻豆中文一区二区| 欧美一级日韩一级| 久久99精品久久久久久国产越南 | 成人综合在线观看| 国产精品久久三| 91免费视频网址| 一区二区三区四区五区视频在线观看| 久久免费视频一区| 亚洲自拍偷拍网站| 91色|porny| 亚洲一二三区在线观看| 欧美日韩一区二区三区视频| 午夜伦欧美伦电影理论片| 91精品国产麻豆| 国产在线乱码一区二区三区| 国产午夜亚洲精品羞羞网站| 成人午夜激情影院| 一区二区三区在线免费视频| 欧美日本韩国一区二区三区视频| 日韩一区精品字幕| 精品福利在线导航| 粉嫩久久99精品久久久久久夜 | 日韩精品电影一区亚洲| 日韩欧美电影一二三| 国产高清精品久久久久| 亚洲欧美国产高清| 欧美一区二区视频在线观看| 国产精品性做久久久久久| 亚洲裸体xxx| 欧美一区二区福利在线| 国产成人啪午夜精品网站男同| 中文字幕一区二区三中文字幕| 欧美午夜一区二区三区免费大片| 久久精品久久精品| 亚洲欧洲日本在线| 91视频www| 婷婷夜色潮精品综合在线| 久久综合九色综合97婷婷| 白白色亚洲国产精品| 香蕉成人伊视频在线观看| 国产欧美日韩麻豆91| 欧美亚洲国产一卡| 国产一区欧美一区| 夜夜嗨av一区二区三区四季av| 精品国产一区二区三区四区四| 91首页免费视频| 久久99久久99精品免视看婷婷| 亚洲日本韩国一区| 精品国内片67194| 色激情天天射综合网| 国产一区二区三区在线观看精品 | 久久av资源网| 亚洲五码中文字幕| 国产亚洲自拍一区| 9191国产精品| 色成年激情久久综合| 国产成人免费9x9x人网站视频| 香蕉成人啪国产精品视频综合网| 中文字幕在线一区免费| 久久这里只有精品6| 在线91免费看| 欧美亚男人的天堂| 国产一区二区在线看| 日韩高清中文字幕一区| 亚洲三级在线免费观看| 久久久久久**毛片大全| 欧美一区二区日韩一区二区| 色狠狠综合天天综合综合| 国产99久久久国产精品| 久久成人18免费观看| 亚洲高清免费观看| 亚洲三级电影网站| 中文字幕巨乱亚洲| 国产亚洲一区二区三区在线观看 | 国产日韩欧美在线一区| 日韩精品一区二区三区中文不卡 | 国产黄色成人av| 蜜臂av日日欢夜夜爽一区| 日日摸夜夜添夜夜添国产精品| 亚洲精品免费看| 亚洲日本电影在线| ㊣最新国产の精品bt伙计久久| 国产欧美日韩精品一区| 欧美精品一区二区久久久| 日韩欧美精品三级| 日韩美女在线视频| 日韩欧美一级特黄在线播放| 欧美一区日韩一区| 日韩一区二区中文字幕| 91精品久久久久久蜜臀|