簡體   English   中英

一個表達式中的多個 Azure SQL 防火牆規則

[英]Multiple Azure SQL Firewall Rules in One Expression

如何在一個 SQL 表達式中設置多個數據庫級防火牆規則 我有許多 IP 地址要在多個數據庫上列入白名單。 我正在尋找執行以下操作:

EXECUTE sp_set_database_firewall_rule
@name = N'Test1',
@start_ip_address = 'x.x.x.x', @end_ip_address = 'x.x.x.x',
@name = N'Test2',
@start_ip_address = 'x.x.x.x', @end_ip_address = 'x.x.x.x',
@name = N'Test3',
@start_ip_address = 'x.x.x.x', @end_ip_address = 'x.x.x.x',
@name = N'Test4',
@start_ip_address = 'x.x.x.x', @end_ip_address = 'x.x.x.x',
@name = N'Test5',
@start_ip_address = 'x.x.x.x', @end_ip_address = 'x.x.x.x',,
@name = N'Test6',
@start_ip_address = 'x.x.x.x', @end_ip_address = 'x.x.x.x',
@name = N'Test7',
@start_ip_address = 'x.x.x.x', @end_ip_address = 'x.x.x.x'

運行上面的查詢不起作用。 我不得不一次輸入 1。 任何幫助表示贊賞。

正如您在問題中所述,T-SQL不支持您嘗試執行的語法。 您可以做的是使用動態SQL使其更容易使用-僅使用一條語句:

DECLARE @SQL NVARCHAR(MAX) = '';

;WITH iplists (IPAddrStart, IPAddrEnd, RuleName) AS 
(
    SELECT '100.0.0.0', '100.0.0.1', 'name0'
    UNION ALL
    SELECT '100.0.0.2', '100.0.0.3', 'name1'
    UNION ALL
    SELECT '100.0.0.4', '100.0.0.5', 'name2'
)
SELECT @SQL+= 'EXECUTE sp_set_database_firewall_rule @name = N''' + iplists.RuleName 
+ ''', @start_ip_address = ''' + iplists.IPAddrStart + ''', @end_ip_address = ''' + 
iplists.IPAddrEnd + '''; ' + CHAR(13)
FROM iplists;

--PRINT @SQL;
EXEC (@SQL);

如果您想要每行的地址范圍,我知道以上內容對大多數人都適用。 我想要一些更容易復制和粘貼的東西。

這對我有用,因為我只想要相同的 IP 開始和結束 - 所以像這樣的東西效果很好:

DECLARE @tempThings TABLE
      (
          ipaddr NVARCHAR(30)
      );
INSERT  @tempThings
VALUES
    ( '100.0.0.0' )
   ,( '100.0.0.65' )
   ,( '100.0.0.76' );
  

SELECT
    *
   ,'EXECUTE sp_set_firewall_rule ' + 'N''Name '
    + CONVERT (NVARCHAR(5), CAST(RAND (CHECKSUM (NEWID ())) * 1000 AS INT)) + ''',' + '''' + [ipaddr] + ''',' + ''''
    + [ipaddr] + '''' + ';' [CommandList]
    FROM    @tempThings;

生產:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM