2024年1月31日 星期三

[研究]T-SQL, SQL Server, 把欄位名稱以 Finish 結尾的,預設值設定為 N''

[研究]T-SQL, SQL Server, 把欄位名稱以 Finish 結尾的,預設值設定為 N''

2024-01-31

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19

N'' 是設定為空字串。

********************************************************************************

修改單一欄位預設值


ALTER TABLE YourSchema.YourTableName
ADD CONSTRAINT DF_DefaultValue DEFAULT N'' FOR YourColumnName;

如果你已經有了預設約束,你也可以更新它的值:

ALTER TABLE YourSchema.YourTableName
DROP CONSTRAINT DF_DefaultValue;

ALTER TABLE YourSchema.YourTableName
ADD CONSTRAINT DF_DefaultValue DEFAULT N'' FOR YourColumnName;

********************************************************************************

如果有很多欄位結尾都是 Finish,且欄位名稱結尾是 Memo 或 Text 也都要改 ( MyTable 請換成實際的 )

DECLARE @ColumnName NVARCHAR(255)
DECLARE @TableName NVARCHAR(255)
DECLARE @SQL NVARCHAR(MAX)

SET @TableName='MyTable'

DECLARE column_cursor CURSOR FOR
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName 
  AND (COLUMN_NAME LIKE '%Finish' 
       OR COLUMN_NAME LIKE '%Memo' 
       OR COLUMN_NAME LIKE '%Text'
      )

OPEN column_cursor
FETCH NEXT FROM column_cursor INTO @ColumnName

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @SQL = 'ALTER TABLE ' + @TableName + ' ADD CONSTRAINT DF_' + @ColumnName + '_Default DEFAULT N'''' FOR ' + QUOTENAME(@ColumnName)

    EXEC sp_executesql @SQL

    FETCH NEXT FROM column_cursor INTO @ColumnName
END

CLOSE column_cursor
DEALLOCATE column_cursor

********************************************************************************

Radio 結尾的「預設值」設定為 0;Check 結尾的「預設值」設定為 1 

DECLARE @ColumnName NVARCHAR(255)
DECLARE @TableName NVARCHAR(255)
DECLARE @SQL NVARCHAR(MAX)

SET @TableName='MyTable'

-- 處理以 Radio 結尾的欄位
DECLARE radio_cursor CURSOR FOR
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName AND COLUMN_NAME LIKE '%Radio'

OPEN radio_cursor
FETCH NEXT FROM radio_cursor INTO @ColumnName

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @SQL = 'ALTER TABLE ' + @TableName + ' ADD CONSTRAINT DF_' + @ColumnName + '_Default DEFAULT 0 FOR ' + QUOTENAME(@ColumnName)

    EXEC sp_executesql @SQL

    FETCH NEXT FROM radio_cursor INTO @ColumnName
END

CLOSE radio_cursor
DEALLOCATE radio_cursor

--處理以 Check 結尾的欄位
DECLARE check_cursor CURSOR FOR
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName AND COLUMN_NAME LIKE '%Check'

OPEN check_cursor
FETCH NEXT FROM check_cursor INTO @ColumnName

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @SQL = 'ALTER TABLE ' + @TableName + ' ADD CONSTRAINT DF_' + @ColumnName + '_Default DEFAULT 1 FOR ' + QUOTENAME(@ColumnName)

    EXEC sp_executesql @SQL

    FETCH NEXT FROM check_cursor INTO @ColumnName
END

CLOSE check_cursor
DEALLOCATE check_cursor

(完)

相關

2024年1月30日 星期二

[研究]本機退出 AD Domain 所需權限測試

[研究]本機退出 AD Domain 所需權限測試

2024-01-30

環境:Windows Server 2022 (本機) + Windows Server 2022 ( AD Domain 的 DC )

此 AD Domain 並無套用 政府組態基準(Government Configuration Baseline,簡稱GCB)。



















********************************************************************************

User

本機 (Windows Server 2022,PC1)、AD Domain DC (Windows Server 2022,PC2)

PC1上,用本機的 administrator 來退出 AD Domain,和 PC1 上用 AD Domain 的administrator 來退出 AD Domain,有差別嗎 ?

ChatGPT

在這種情況下,當你在 PC1 上使用本地的 administrator 帳戶退出 AD 網域和使用 PC1 上的 AD 網域管理員帳戶退出 AD 網域時,確實存在一些差異:

1.使用本機 administrator 帳號退出 AD 網域:

  • 透過本機管理員帳號退出網域,PC1 將不再作為網域成員存在,且與網域之間的信任關係將解除。
  • PC1 的本機管理員帳戶將成為該電腦的最高權限用戶,但會失去與網域相關的權限和配置。

2.使用 PC1 上的 AD 網域管理員帳號退出 AD 網域:

  • 透過 AD 網域管理員帳戶退出網域,PC1 也將不再作為網域成員存在,但與網域的關係會以另一種方式解除。
  • PC1 將保留電腦物件和與網域相關的設定文件,這表示重新加入網域時,可以更輕鬆地恢復到先前的網域設定。

總的來說,使用PC1 上的AD 網域管理員帳戶退出網域會保留更多與網域相關的配置和權限,而使用本機管理員帳戶退出網域將導致PC1 完全與網域斷開,並且失去與網域相關 的一切設定。

********************************************************************************

結論:雖然本機 administrator 無法把本機加入 AD Domain,但可以退出 AD Doamin;但似乎用 AD Domain 的 administrator 來退出 AD Domain 會比較好。

(完)

相關

[研究]退出 GCB AD Domain 成功,但實際上沒有完全成功
https://shaurong.blogspot.com/2024/01/gcb-ad-domain.html

[研究][GCB][AD]SQL Server 2019 登入失敗:無法連線至 。使用者 的登入失敗。(Microsoft SQL Server, 錯誤: 18456)
https://shaurong.blogspot.com/2024/01/sql-server-2019-microsoft-sql-server.html

[研究]GCB,Windows 2019、2022 Common 排除評估
https://shaurong.blogspot.com/2024/01/gcbwindows-20192022-common.html

[研究]本機加入 AD Domain 所需權限測試
https://shaurong.blogspot.com/2024/01/ad-domain.html

[研究]本機退出 AD Domain 所需權限測試
https://shaurong.blogspot.com/2024/01/ad-domain_30.html

[研究]本機加入 AD Domain 所需權限測試

[研究]本機加入 AD Domain 所需權限測試

2024-01-30

環境:Windows Server 2022 (本機) + Windows Server 2022 ( AD Domain 的 DC )

此 AD Domain 並無套用 政府組態基準(Government Configuration Baseline,簡稱GCB)。

********************************************************************************

(下圖) 因為用的 Domain 不是 Internet 上真實存在的 Domain,為了 DNS 解析,故於 C:\Windows\system32\drivers\hosts 中設定。

























結論:本機一般帳號或 administrator 都不行,AD Domain 的 administrator 成功。

(完)

相關

[研究]退出 GCB AD Domain 成功,但實際上沒有完全成功
https://shaurong.blogspot.com/2024/01/gcb-ad-domain.html

[研究][GCB][AD]SQL Server 2019 登入失敗:無法連線至 。使用者 的登入失敗。(Microsoft SQL Server, 錯誤: 18456)
https://shaurong.blogspot.com/2024/01/sql-server-2019-microsoft-sql-server.html

[研究]本機加入 AD Domain 所需權限測試
https://shaurong.blogspot.com/2024/01/ad-domain.html

[研究]GCB,Windows 2019、2022 Common 排除評估
https://shaurong.blogspot.com/2024/01/gcbwindows-20192022-common.html

[研究]GCB,Windows 2019、2022 Common 排除評估

[研究]GCB,Windows Server 2019 Common、Windows Server 2022 Common排除評估

2024-01-30

政府組態基準(Government Configuration Baseline,簡稱GCB)

政府組態基準(GCB) / GCB部署資源 / 作業系統GPO檔 /
4. GCB-WindowsServer2019-gposv1.1_1120306.zip
5. GCB-WindowsServer2022-gposv1.0_1121201.zip
https://www.nics.nat.gov.tw/GCB.htm?lang=zh
https://www.nics.nat.gov.tw/GCBDownloadDetail-7.htm?lang=zh&seq=1079

項次GPO類別原則設定名稱GPO設定路徑GCB設定值排除說明
1Windows 2019 common安全性選項\系統加密編譯系統密碼編譯:使用FIPS相容演算法於加密、雜湊以及簽章電腦設定\Windows設定\安全性設定\本機原則\安全性選項啟用該設定會影響登入部分系統,故改為停用
2Windows 2019 common使用者權限指派允許本機登入本機原則/使用者權限指派Administrators遠端登入部署維運使用
3Windows 2019 common使用者權限指派允許透過終端機服務登入本機原則/使用者權限指派Administrators遠端登入部署維運使用
4Windows 2019 common使用者權限指派以服務方式登入本機原則/使用者權限指派 No One系統排程服務使用NT SERVICE\ALL SERVICES、NT Service\MSSQLSERVER與NT Service\SQLSERVERAGENT,但該服務只能在各台主機上單獨設定,無法透過派送原則進行
5Windows 2019 common使用者權限指派拒絕從網路存取這台電腦本機原則/使用者權限指派遠端登入部署維運使用(改為拒絕Guests)
6Windows 2019 common使用者權限指派讓電腦及使用者帳戶受信賴,以進行委派本機原則/使用者權限指派No One系統排程服務使用(請確認要加入哪個使用者或群組)Administrators
7Windows 2019 commonWindows 遠端殼層允許遠端殼層存取Windows 元件/Windows 遠端殼層停用遠端登入部署維運使用
8Windows 2019 commonWindows 遠端殼層需要對遠端 (RDP) 連線使用特定的安全層Windows 元件/遠端桌面服務/遠端桌面工作階段主機/安全性遠端登入部署維運使用(請告知要停用或啟用)啟用
9Windows 2019 common遠端桌面服務\遠端桌面工作階段主機不允許剪貼簿重新導向Windows 元件/遠端桌面服務/遠端桌面工作階段主機/裝置及資源重新導向啟用遠端登入部署維運使用
10Windows 2019 common遠端桌面服務\遠端桌面工作階段主機不允許磁碟重新導向Windows 元件/遠端桌面服務/遠端桌面工作階段主機/裝置及資源重新導向啟用遠端登入部署維運使用
11Windows 2019 common使用者權限指派拒絕透過遠端桌面服務本機原則/使用者權限指派遠端登入部署維運使用(改為拒絕Guests)

********************************************************************************

Windows Server 2022 上,執行 gpedit.msc 啟動「本機群組原則編輯器」

接下來看沒套 GCB,和套用但排除的狀況。

********************************************************************************

No.1「本機電腦原則/電腦設定/Windows設定/安全性設定/本機原則/安全性選項」的「系統密碼編譯:使用FIPS相容演算法於加密、雜湊以及簽章」

(下圖) 沒套 GCB

(下圖) 套 GCB,但排除此條





系統密碼編譯 使用符合 FIPS 規範的演算法進行加密、雜湊和簽署 - Windows Security | Microsoft Learn

****************************************

FipsAlgorithmPolicy 有哪幾種值 ? 意義 ?

ChatGPT
在 Windows 註冊表中的 FIPSAlgorithmPolicy 關鍵字通常是一個 DWORD 值,用來指定 FIPS 模式的狀態。這個值的可能性如下:
  • FIPS 模式已啟用 (Enabled):數值為 1 (0x1): 代表 FIPS 模式已經啟用。這表示系統將使用 FIPS(聯邦資訊處理標準)相容的加密、雜湊和簽章演算法,以符合相應的安全標準。
  • FIPS 模式已禁用 (Disabled):數值為 0 (0x0): 代表 FIPS 模式已經禁用。在這種情況下,系統將使用非 FIPS 相容的演算法。
通常,這個設定是在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy 中找到的。修改這個值可能需要系統管理員權限。

請注意,FIPS 模式的使用會影響系統的安全性和相容性。在某些安全環境中,啟用 FIPS 模式可能是必需的,因為它確保使用符合 FIPS 標準的加密和雜湊演算法。在其他情況下,可能會因應應用程式的需求而禁用 FIPS 模式。在進行任何更改之前,建議仔細檢閱相關的安全政策和需求。
********************************************************************************

No.2

(下圖) 沒套 GCB


(下圖) 套 GCB,但排除此條

********************************************************************************

No.3




********************************************************************************
No.4



(下圖)套用 GCB後,「以服務方式登入」會被清空,SQL Server 會癱瘓

(下圖)套用 GCB後,SQL Server 服務要手動加回

(下圖)至少要把「NT Service\MSSQLSERVER」加回「以服務方式登入」中,這是 SQL Server最重要的服務,資料庫引擎在使用。

(下圖)非必須,但如果要使用「維護計畫」每天自動備份資料庫,要把「NT Service\MSSQLSERVER」和「NT Service\SQLSERVERAGENT」加回「以服務方式登入」中。




它們存在於
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLSERVER
尋找名為"ObjectName"的登錄值。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT
尋找名為"ObjectName"的登錄值。

敝人研究想做 .reg 檔案,用 regedit.exe 把 SQL Server 用的服務加入「以服務方式登入」中,找不到設定在服務的哪裡。

[研究]如何用 Regedit.exe 把「NT Service\MSSQLSERVER」和「NT Service\SQLSERVERAGENT」加入gpedit 的「以服務方式登入」中 ?

********************************************************************************
No.5



********************************************************************************
No.6



********************************************************************************
No.7




********************************************************************************
No.8




********************************************************************************
No.9




********************************************************************************
No.10



********************************************************************************
No.11


********************************************************************************

(完)

相關

[研究]退出 GCB AD Domain 成功,但實際上沒有完全成功
https://shaurong.blogspot.com/2024/01/gcb-ad-domain.html

[研究][GCB][AD]SQL Server 2019 登入失敗:無法連線至 。使用者 的登入失敗。(Microsoft SQL Server, 錯誤: 18456)
https://shaurong.blogspot.com/2024/01/sql-server-2019-microsoft-sql-server.html

[研究]本機加入 AD Domain 所需權限測試
https://shaurong.blogspot.com/2024/01/ad-domain.html

[研究]GCB,Windows 2019、2022 Common 排除評估
https://shaurong.blogspot.com/2024/01/gcbwindows-20192022-common.html