Sao lưu SQL Server 2016 Đăng nhập


8

Tôi cần sao lưu Instance của SQL Server 2016, tôi đã có bản sao lưu hàng đêm của cơ sở dữ liệu mong muốn tuy nhiên tôi cần sao lưu người dùng và vai trò cho ví dụ ..... Làm thế nào tôi có thể làm điều này? Được xây dựng trong công việc hoặc T-sql tùy chỉnh Tôi có thể lên lịch để chạy?

Tôi không giỏi lắm với SQL nếu ai đó có thể chỉ cho tôi đi đúng hướng


Tôi không biết cách lên lịch này nhưng bạn đã xem Tạo tập lệnh và chỉ chọn các đối tượng đó chưa? Nhấp chuột phải vào DB> Nhiệm vụ> Tạo tập lệnh và làm theo trình hướng dẫn.
Ollie

3
Tôi đã thêm từ "Đăng nhập" vào tiêu đề của bạn bởi vì câu hỏi của bạn thực sự là về việc sao lưu Đăng nhập Máy chủ SQL chứ không phải về sao lưu cơ sở dữ liệu. Tôi hy vọng điều này là ok với bạn? Nếu không, cảm thấy tự do để trở lại.
John aka hot2use

Câu trả lời:


9

Nói chung

Tôi sẽ xem xét việc đọc thông tin cơ sở dữ liệu chủ chứa thông tin gì và tại sao bạn cần sao lưu cơ sở dữ liệu hệ thống (master, msdb, ...).

Tham khảo: Sao lưu và khôi phục cơ sở dữ liệu hệ thống (SQL Server) (Microsoft Docs)

cơ sở dữ liệu chủ

Cơ sở dữ liệu chủ chứa thông tin sau cho mỗi phiên bản SQL Server:

Cơ sở dữ liệu chủ ghi lại tất cả thông tin cấp hệ thống cho hệ thống Máy chủ SQL. Điều này bao gồm siêu dữ liệu trên toàn thể hiện như tài khoản đăng nhập , điểm cuối, máy chủ được liên kết và cài đặt cấu hình hệ thống. Trong SQL Server, các đối tượng hệ thống không còn được lưu trữ trong cơ sở dữ liệu chủ; thay vào đó, chúng được lưu trữ trong cơ sở dữ liệu tài nguyên. Ngoài ra, master là cơ sở dữ liệu ghi lại sự tồn tại của tất cả các cơ sở dữ liệu khácvị trí của các tệp cơ sở dữ liệu đó và ghi lại thông tin khởi tạo cho SQL Server. Do đó, SQL Server không thể khởi động nếu cơ sở dữ liệu chủ không có sẵn.

( nhấn mạnh của tôi)

Tham khảo: Cơ sở dữ liệu chủ (Microsoft Docs)

Cơ sở dữ liệu msdb

Cơ sở dữ liệu msdb chứa thông tin sau của phiên bản SQL Server:

Cơ sở dữ liệu msdb được sử dụng bởi SQL Server Agent để lập lịch cảnh báo và công việc và bởi các tính năng khác như SQL Server Management Studio, Service Broker và Database Mail.

Ví dụ: SQL Server tự động duy trì lịch sử sao lưu và khôi phục trực tuyến hoàn chỉnh trong các bảng trong msdb . Thông tin này bao gồm tên của bên thực hiện sao lưu, thời gian sao lưu và các thiết bị hoặc tệp nơi lưu trữ bản sao lưu. SQL Server Management Studio sử dụng thông tin này để đề xuất kế hoạch khôi phục cơ sở dữ liệu và áp dụng bất kỳ bản sao lưu nhật ký giao dịch nào. Các sự kiện sao lưu cho tất cả các cơ sở dữ liệu được ghi lại ngay cả khi chúng được tạo bằng các ứng dụng tùy chỉnh hoặc công cụ của bên thứ ba.Ví dụ: nếu bạn sử dụng ứng dụng Microsoft Visual Basic gọi các đối tượng SQL Server Management Object (SMO) để thực hiện các hoạt động sao lưu, sự kiện được ghi vào bảng hệ thống msdb, nhật ký ứng dụng Microsoft Windows và nhật ký lỗi SQL Server. Để giúp bạn bảo vệ thông tin được lưu trữ trong msdb, chúng tôi khuyên bạn nên xem xét việc đặt nhật ký giao dịch msdb trên bộ lưu trữ chịu lỗi.

( nhấn mạnh của tôi)

Tham khảo: Cơ sở dữ liệu msdb (Microsoft Docs)

Phần kết luận

Nếu bạn sao lưu cơ sở dữ liệu chủ, thì tất cả thông tin đăng nhập cho ví dụ là an toàn. Tuy nhiên, nếu bạn muốn sao lưu riêng ( như trong: được sử dụng để chuyển thông tin đăng nhập sang các phiên bản khác nhau, được sử dụng để đặt lại mật khẩu) Đăng nhập SQL của phiên bản, thì bạn sẽ phải áp dụng một giải pháp khác.

Giải pháp sao lưu đăng nhập máy chủ SQL cá nhân

Danh sách tham khảo công cụ

Đã thêm tiền thưởng

Tham chiếu cuối cùng là một bài viết thú vị về cách xuất thủ công các thông tin đăng nhập SQL Server và mật khẩu được băm để tự chuyển chúng sang một phiên bản SQL Server mới. Bài viết liên quan đến việc tạo hai thủ tục được lưu trữ và sau đó chạy một để tạo thông tin.

Dưới đây là mã từ bài viết được giới thiệu để tạo hai thủ tục:

USE master
GO
IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL
  DROP PROCEDURE sp_hexadecimal
GO
CREATE PROCEDURE sp_hexadecimal
    @binvalue varbinary(256),
    @hexvalue varchar (514) OUTPUT
AS
DECLARE @charvalue varchar (514)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = '0x'
SELECT @i = 1
SELECT @length = DATALENGTH (@binvalue)
SELECT @hexstring = '0123456789ABCDEF'
WHILE (@i <= @length)
BEGIN
  DECLARE @tempint int
  DECLARE @firstint int
  DECLARE @secondint int
  SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
  SELECT @firstint = FLOOR(@tempint/16)
  SELECT @secondint = @tempint - (@firstint*16)
  SELECT @charvalue = @charvalue +
    SUBSTRING(@hexstring, @firstint+1, 1) +
    SUBSTRING(@hexstring, @secondint+1, 1)
  SELECT @i = @i + 1
END

SELECT @hexvalue = @charvalue
GO

IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL
  DROP PROCEDURE sp_help_revlogin
GO
CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
DECLARE @name sysname
DECLARE @type varchar (1)
DECLARE @hasaccess int
DECLARE @denylogin int
DECLARE @is_disabled int
DECLARE @PWD_varbinary  varbinary (256)
DECLARE @PWD_string  varchar (514)
DECLARE @SID_varbinary varbinary (85)
DECLARE @SID_string varchar (514)
DECLARE @tmpstr  varchar (1024)
DECLARE @is_policy_checked varchar (3)
DECLARE @is_expiration_checked varchar (3)

DECLARE @defaultdb sysname

IF (@login_name IS NULL)
  DECLARE login_curs CURSOR FOR

      SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM 
sys.server_principals p LEFT JOIN sys.syslogins l
      ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa'
ELSE
  DECLARE login_curs CURSOR FOR


      SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM 
sys.server_principals p LEFT JOIN sys.syslogins l
      ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_name
OPEN login_curs

FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
IF (@@fetch_status = -1)
BEGIN
  PRINT 'No login(s) found.'
  CLOSE login_curs
  DEALLOCATE login_curs
  RETURN -1
END
SET @tmpstr = '/* sp_help_revlogin script '
PRINT @tmpstr
SET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'
PRINT @tmpstr
PRINT ''
WHILE (@@fetch_status <> -1)
BEGIN
  IF (@@fetch_status <> -2)
  BEGIN
    PRINT ''
    SET @tmpstr = '-- Login: ' + @name
    PRINT @tmpstr
    IF (@type IN ( 'G', 'U'))
    BEGIN -- NT authenticated account/group

      SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']'
    END
    ELSE BEGIN -- SQL Server authentication
        -- obtain password and sid
            SET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) )
        EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT
        EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT

        -- obtain password policy state
        SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name
        SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name

            SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']'

        IF ( @is_policy_checked IS NOT NULL )
        BEGIN
          SET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checked
        END
        IF ( @is_expiration_checked IS NOT NULL )
        BEGIN
          SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked
        END
    END
    IF (@denylogin = 1)
    BEGIN -- login is denied access
      SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name )
    END
    ELSE IF (@hasaccess = 0)
    BEGIN -- login exists but does not have access
      SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name )
    END
    IF (@is_disabled = 1)
    BEGIN -- login is disabled
      SET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE'
    END
    PRINT @tmpstr
  END

  FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
   END
CLOSE login_curs
DEALLOCATE login_curs
RETURN 0
GO

Khi bạn đã tạo các thủ tục được lưu trữ, hãy chạy sp_help_Vv_login để lấy thông tin.

EXEC sp_help_revlogin

Tập lệnh đầu ra mà thủ tục lưu trữ sp_help_Vvlogin tạo ra là tập lệnh đăng nhập. Tập lệnh đăng nhập này tạo thông tin đăng nhập có Mã định danh bảo mật gốc (SID) và mật khẩu gốc.

Tham khảo: Cách chuyển thông tin đăng nhập và mật khẩu giữa các phiên bản của SQL Server (bài viết Microsoft KB)

Thưởng thức


tuyệt diệu! tất cả mọi thứ tôi cần và nhiều hơn nữa! cảm ơn bạn :)
NULL.Dude

3

Bạn nên xem DBATools có phải là giải pháp cho bạn không.

dbatools là một mô-đun PowerShell miễn phí với hơn 300 quản trị SQL Server, bao gồm các lệnh di chuyển và thực hành tốt nhất.

Nhận các thành viên của tất cả các vai trò trên một ví dụ SQL. Đầu ra mặc định bao gồm các cột SqlServer, Cơ sở dữ liệu, Vai trò, Thành viên.

Lệnh Xuất-DBAUser qua DBATools

Tải xuống DBATools


2

Cả hai câu trả lời đều tốt.

Chỉ muốn thêm một tùy chọn khác từ @ Kenneth-Fisher của chúng tôi :

Mã mẫu:

EXEC master.dbo.sp_SrvPermissions 
    @Principal = 'NULL',
    @Role = NULL, 
    @Type = NULL,
    @DBName = NULL,
    @UseLikeSearch = 1,
    @IncludeMSShipped = 0,
    @DropTempTables = 1,
    @Output = 'Default',
    @Print = 0

EXEC master.dbo.sp_DBPermissions
    @DBName = 'ALL',
    @Principal = 'NULL',
    @IncludeMSShipped = 0,
    @Role = NULL,
    @Type = NULL,
    @ObjectName = NULL,
    @Permission = NULL,
    @LoginName = NULL,
    @Print = 0;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.