主頁 > 資料庫 > SQL Server如何正確的洗掉Windows認證用戶

SQL Server如何正確的洗掉Windows認證用戶

2020-09-14 22:24:58 資料庫


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.

 

clip_image001

 

 

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='xxx\xxxx'
 
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,可以留言反饋,


   --注意:但是之前腳本也有弊端,有時候login對應多個資料庫的User,需要在多個資料庫運行,所以個人優化了SQL,你可以忽略上面的SQL,直接執行下面SQL即可(2020-03-10修改過下面腳本)

--==================================================================================================================
--        ScriptName            :            drop_logins_users.sql
--        Author                :            瀟湘隱者    
--        CreateDate            :            2015-12-18
--        Description           :            徹底、完全的洗掉某個login以及對應的user等權限
--        Note                  :            
/*******************************************************************************************************************
        Parameters            :                                    引數說明
********************************************************************************************************************
            @login_name        :            你要洗掉的登錄名(Windows認證賬號或SQL認證賬號)
********************************************************************************************************************
        Notice                :            
********************************************************************************************************************
   Modified Date    Modified User     Version                 Modified Reason
********************************************************************************************************************
    2018-08-03        瀟湘隱者         V01.00.00        新建該腳本,
*******************************************************************************************************************/
--==================================================================================================================
DECLARE @database_id    INT;
DECLARE @database_name  sysname;
DECLARE @cmdText        NVARCHAR(MAX);
DECLARE @prc_text       NVARCHAR(MAX);
DECLARE @RowIndex       INT;
DECLARE @login_name     NVARCHAR(128);
DECLARE @job_owner      NVARCHAR(32);
 
 
SET @login_name='xxxx';
SET @job_owner='sa';
 
 
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'tempdb', 'model', 'YourSQLDba' )
        AND state = 0; --state_desc=ONLINE 
 
 
IF OBJECT_ID('tempdb.dbo.#removed_user') IS NOT NULL
    DROP TABLE dbo.#removed_user;
 
CREATE TABLE #removed_user
(
    username sysname
)
 
 
IF OBJECT_ID('tempdb.dbo.#sql_text') IS NOT NULL
    DROP TABLE dbo.#sql_text
 
CREATE TABLE #sql_text
(    
    sql_type  NVARCHAR(32),
    sql_cmd   NVARCHAR(MAX)
);
 
 
--查看作業的OWNER為當前賬戶的詳細資訊
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;
 
 
 
--修改作業的Owner
INSERT INTO #sql_text
SELECT   'change_job_owner'  AS sql_type
        ,'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;
 
 
--查看資料庫的Owner=@login_name的詳細資訊
SELECT d.database_id                AS database_id,
       d.name                       AS database_name,
       suser_sname(d.owner_sid)     AS database_owner,
       d.create_date                AS create_date,
       d.collation_name             AS collation_name,
       d.state_desc                 AS state_desc
FROM sys.databases d
WHERE suser_sname(d.owner_sid)=@login_name;
 
 
 
--修改資料庫的Owner為sa
INSERT INTO #sql_text
SELECT  'change_db_owner' AS sql_type
       ,'USE ' +name +'; '+ CHAR(10) +'GO' + CHAR(10) +'exec sp_changedbowner ''sa'';' +CHAR(10) + 'GO' +CHAR(10)
FROM sys.databases d
WHERE suser_sname(d.owner_sid)=@login_name;
 
 
 
 
IF OBJECT_ID('tempdb.dbo.#schema_info') IS NOT NULL
    DROP TABLE dbo.#schema_info;
 
CREATE TABLE #schema_info
(    
     database_name      NVARCHAR(64)
    ,users_name         NVARCHAR(64)
    ,schemas_name       NVARCHAR(64)
    ,schema_id          INT
    ,principal_id       INT
);
 
IF OBJECT_ID('tempdb.dbo.#schema_detail') IS NOT NULL
    DROP TABLE dbo.#schema_detail;
 
CREATE TABLE #schema_detail
(    
     database_name     NVARCHAR(64)
    ,objects_id        INT
    ,objects_name      NVARCHAR(64)
    ,schemas_name      NVARCHAR(64)
    ,object_type       sysname
    ,create_date       DATETIME
    ,modify_date       DATETIME
);
 
 
 
 
--開始回圈每一個用戶資料庫(排除了上面相關資料庫)
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);
 
    --這里有個bug,如果用戶洗掉了對應的login,那么這里查詢結果就會沒有記錄
    --SELECT @cmdText += 'INSERT INTO #removed_user
    --                    SELECT  name FROM sys.sysusers
    --                    WHERE sid IN (SELECT sid FROM sys.syslogins WHERE isntname=1 AND name='''+ @login_name + ''');'
    
    SELECT @cmdText += 'INSERT INTO #removed_user
                        SELECT  name FROM sys.sysusers WHERE  name='''+ @login_name + ''';'
    
    --PRINT(@cmdText);
    EXEC SP_EXECUTESQL @cmdText;
 
     
 
 
    
    SET @cmdText =  'USE ' + @database_name + ';' +CHAR(10)
 
    
    SET @cmdText += 'SELECT DB_NAME(), r.username,s.name, s.schema_id, s.principal_id FROM sys.schemas  s
                        INNER JOIN  #removed_user r ON s.name =r.username Collate Database_Default' + CHAR(10);
     
    INSERT INTO #schema_info
    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);'
 
    SET @cmdText += 'SELECT  DB_NAME(),o.object_id, o.name,SCHEMA_NAME(o.schema_id), o.type_desc, o.create_date,o.modify_date  FROM sys.objects o
                        INNER JOIN sys.schemas s ON o.schema_id=s.schema_id
                        INNER JOIN  #removed_user r ON s.name =r.username Collate Database_Default'
 
    INSERT INTO #schema_detail
            ( 
                 database_name      
                ,objects_id          
                ,objects_name      
                ,schemas_name      
                ,object_type      
                ,create_date      
                ,modify_date
            )
    EXEC SP_EXECUTESQL @cmdText;
    
 
    SET @cmdText =  'USE ' + @database_name + ';' +CHAR(10)
    SET @cmdText += 'SELECT  ''change_schema_cmd'' AS sql_type , ''USE ' + @database_name + ';'' + CHAR(10) +''GO'' + CHAR(10) +''ALTER AUTHORIZATION ON SCHEMA::'' +QUOTENAME(s.name) +''  TO [dbo];'' + CHAR(10) + ''GO'' AS change_schema_cmd FROM sys.schemas  s
                        INNER JOIN  #removed_user r ON s.name =r.username Collate Database_Default '  + CHAR(10);
 
    PRINT @cmdText;
    INSERT INTO #sql_text
    EXEC SP_EXECUTESQL @cmdText, N'@database_name sysname',@database_name ;
    
 
    SET @cmdText =  'USE ' + @database_name + ';' +CHAR(10)
    SET @cmdText += 'SELECT ''drop_schema_cmd'' AS drop_schema_cmd, ''USE ' + @database_name + ';'' + CHAR(10) +''GO'' + CHAR(10) +''DROP SCHEMA '' +QUOTENAME(s.SCHEMA_NAME) +'';'' +CHAR(10) + ''GO'' AS drop_schema_cmd
                     FROM    INFORMATION_SCHEMA.SCHEMATA s
                     INNER JOIN  #removed_user r ON s.SCHEMA_OWNER =r.username Collate Database_Default'  + CHAR(10);
 
    INSERT INTO #sql_text
    EXEC SP_EXECUTESQL @cmdText, N'@database_name sysname',@database_name ;
 
    INSERT INTO #sql_text
    SELECT 'drop_user_cmd' AS drop_schema_cmd,
            '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
 
 
 
 
 
 
--洗掉login名
INSERT INTO #sql_text
SELECT  'drop_login_cmd' AS drop_schema_cmd,
'USE [master]
GO
DROP LOGIN  ' + QUOTENAME(name) +  CHAR(10) +'GO' AS  drop_login_user
FROM sys.syslogins WHERE name=@login_name;
 
 
SELECT * FROM  #schema_detail;
SELECT * FROM  #sql_text;
 
DROP TABLE #databases;
DROP TABLE #removed_user;
DROP TABLE #schema_detail;
DROP TABLE #sql_text;

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/39243.html

標籤:SQL Server

上一篇:SQL DROP INDEX 陳述句

下一篇:資料庫設計優化

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more