婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 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認證用戶的方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美探花视频资源| 亚洲男人电影天堂| 精品国产自在久精品国产| 亚洲精品ww久久久久久p站| 欧美影片第一页| 久久超碰97中文字幕| 欧美精品乱码久久久久久| 欧美日韩精品三区| 国产一区 二区 三区一级| 国产精品毛片无遮挡高清| 香蕉久久夜色精品国产使用方法 | 精品国产青草久久久久福利| 亚洲免费在线观看视频| 成人精品免费视频| 国产农村妇女精品| 美女被吸乳得到大胸91| 国产精品久久国产精麻豆99网站| 欧美肥妇毛茸茸| 日本韩国欧美一区二区三区| 成人app网站| 国产一区二区三区在线看麻豆| 亚洲国产另类av| 亚洲欧美电影一区二区| 一本久道久久综合中文字幕 | 久久精品国产99| 欧美xxxx老人做受| 国内精品第一页| 欧美一级精品在线| 97久久超碰精品国产| 欧美日韩aaaaaa| 欧美日韩成人综合| 日韩一区二区三区视频在线观看| 欧美一区二区免费视频| 国产精品久久久久久久久晋中| 亚洲大型综合色站| 91在线视频免费91| 久久美女高清视频| 久久成人免费网| 欧美日韩视频第一区| 亚洲色图第一区| 中文字幕在线不卡一区| 亚洲精品第一国产综合野| 精品一区二区三区香蕉蜜桃| 欧美在线你懂得| 日韩欧美一区二区免费| 中文字幕在线观看一区| 日本午夜一区二区| 在线观看国产91| 国产女主播在线一区二区| 亚洲国产欧美在线| 色综合中文字幕国产 | 久久电影网电视剧免费观看| 高清在线不卡av| eeuss鲁片一区二区三区| 在线不卡欧美精品一区二区三区| 久久久久久久综合狠狠综合| 亚洲成a人片在线不卡一二三区| 国产剧情一区二区| 日韩欧美123| 国产午夜一区二区三区| 国产一区二区免费在线| 国产一区999| 日韩一区二区免费视频| 亚洲va中文字幕| 国产精品乱码人人做人人爱 | 成人免费av资源| 成人免费视频视频在线观看免费 | 欧美私人免费视频| 日本伊人色综合网| 欧美一区二区三区四区久久| www.色精品| 99久久国产综合精品麻豆| 中文字幕av不卡| 九九在线精品视频| 欧美日本乱大交xxxxx| 亚洲欧美日韩一区| 国产一区二区三区四区五区入口| 日韩免费电影一区| 欧美v日韩v国产v| 成人黄色网址在线观看| 美国精品在线观看| 亚洲综合久久av| 奇米影视一区二区三区小说| 91原创在线视频| 日本视频一区二区三区| 专区另类欧美日韩| 久久久久国产一区二区三区四区 | 日韩福利视频网| 亚洲男帅同性gay1069| 精品福利视频一区二区三区| 精品视频一区二区不卡| 色综合中文字幕国产 | 无吗不卡中文字幕| 欧美中文字幕不卡| 久久国产夜色精品鲁鲁99| 久久久久99精品国产片| av在线不卡网| 国模套图日韩精品一区二区| 中文字幕在线一区免费| 日韩视频永久免费| 国产传媒欧美日韩成人| 亚洲免费在线观看| 亚洲国产综合视频在线观看| 五月天欧美精品| 麻豆精品一区二区| 91丨九色丨黑人外教| 中文字幕亚洲欧美在线不卡| 成人app网站| 亚洲免费av观看| 精品视频在线免费看| 免费观看91视频大全| 久久综合999| 国产精品自拍av| 亚洲少妇最新在线视频| 欧美日韩国产精选| 极品美女销魂一区二区三区| 精品久久久久久亚洲综合网| 成人h精品动漫一区二区三区| 国产日韩欧美麻豆| 欧美性生活久久| 日韩女优视频免费观看| 激情六月婷婷综合| 国产精品电影院| 欧美精品精品一区| jlzzjlzz亚洲女人18| 亚洲国产精品精华液网站| 91精品久久久久久久91蜜桃| 久久久国产一区二区三区四区小说 | 欧美亚男人的天堂| 韩国三级在线一区| 日本女优在线视频一区二区| 亚洲精品五月天| 自拍偷拍亚洲综合| 国产精品福利一区二区三区| 欧美日韩国产精选| 中文字幕欧美激情一区| 婷婷六月综合网| 91久久精品国产91性色tv| 男女男精品视频| 国产精品伦理一区二区| 91精品欧美久久久久久动漫| 91无套直看片红桃| 另类小说视频一区二区| 亚洲三级在线免费观看| 91精品国产福利| 91久久线看在观草草青青| 成人av电影在线观看| 蜜臀av一区二区在线免费观看| 亚洲精品第1页| 男女性色大片免费观看一区二区| 日本韩国一区二区三区视频| 亚洲欧美色一区| 裸体健美xxxx欧美裸体表演| 国产欧美综合在线观看第十页| 色婷婷亚洲一区二区三区| 激情欧美一区二区三区在线观看| 一区二区三区欧美久久| 国产精品久久影院| 国产精品毛片久久久久久久| 国产女人aaa级久久久级 | 91国内精品野花午夜精品| yourporn久久国产精品| 国产99久久久国产精品免费看 | 在线观看日韩一区| 久久亚洲一级片| 亚洲国产成人tv| 91浏览器在线视频| 国产日产欧产精品推荐色| 激情久久五月天| 91精品国产高清一区二区三区| 婷婷综合在线观看| 777色狠狠一区二区三区| 丝袜美腿高跟呻吟高潮一区| 欧美午夜片在线观看| 亚洲福利一二三区| 成人国产精品免费网站| 免费日本视频一区| 久久爱www久久做| 欧美综合一区二区三区| 中文乱码免费一区二区| 成人动漫一区二区| 国产精品久久久久aaaa樱花| 成人午夜激情影院| 一区二区三区中文字幕精品精品| 99在线视频精品| 蜜臀av一区二区在线观看 | av午夜一区麻豆| 久久综合久久鬼色| 夜夜爽夜夜爽精品视频| 国产精品中文字幕欧美| 精品视频999| 亚洲成av人片一区二区| 亚洲综合免费观看高清完整版在线 | 欧美国产欧美综合| 一区二区三区四区中文字幕| 蜜臀精品久久久久久蜜臀| 色哟哟国产精品免费观看| 99精品黄色片免费大全| 国产精品蜜臀在线观看| 免费成人在线影院|