Is there a way to limit the range of dynamic ports available to SQL Server from the database side, or database server side? Our SOP is to use static ports across the network firewall and a vendor is having trouble locking down their ports. Theoretically, if we allowed a range of 1000 ports inside the dynamic range (49152–65535) across the firewall how would I limit SQL Server to only assign a dynamic port inside that range?
As Cougar9000 found out himself the usage of ephemeral (dynamic) ports is not managed by the application but by the operating system. You can only change it for the whole server.
The answer to this question does provide you with the information and links you need.
In short you could do
netsh int ipv4 set dynamicport tcp start=50000 num=1000
Please note that making the range too small may result in TCP/IP Port Exhaustion.
Here's the start of a PowerShell solution as I mentioned in the comments:
$instanceId = "<Instance ID>"; $registryKey = "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\$instanceId\MSSQLServer\SuperSocketNetLib\TCP\IPAll" $portNumber = (Get-Item $registryKey).GetValue("TcpDynamicPorts"); netsh advfirewall firewall add rule action=allow localport=$portNumber protocol=TCP dir=in name="SQL Server Database Engine ($instanceId)"
I'm not sure if this is going to be appropriate for the exact situation, but it might help someone out there.