You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell在SSMS中配置用户连接数据库引擎的权限

PowerShell 授予SQL Server用户数据库连接权限的实现方案

你可以通过以下两种稳定可行的方式完成配置:

方案1:使用SqlServer模块原生接口实现

  • 提前安装依赖模块:
    Install-Module -Name SqlServer -Force -AllowClobber
  • 授权示例代码:
# 替换为你的实际参数
$sqlServerName = "你的SQL实例名"
$loginName = "要授权的登录名"
$targetDbName = "目标数据库名"

# 加载SQL Server SMO对象
$server = New-Object Microsoft.SqlServer.Management.Smo.Server($sqlServerName)
$db = $server.Databases[$targetDbName]
$user = $db.Users[$loginName]

# 授予CONNECT权限
$permissionSet = New-Object Microsoft.SqlServer.Management.Smo.DatabasePermissionSet
$permissionSet.Connect = $true
$db.Grant($permissionSet, $user.Name)

方案2:直接执行T-SQL语句实现(兼容性更好,不受模块版本限制)

直接通过Invoke-Sqlcmd执行授权SQL即可,写法更简洁,适配所有SQL Server 2012及以上版本,推荐优先使用。示例代码:

# 替换为你的实际参数
$sqlServerName = "你的SQL实例名"
$loginName = "要授权的登录名"
$targetDbName = "目标数据库名"

$grantSql = "GRANT CONNECT ON DATABASE::[$targetDbName] TO [$loginName]"
Invoke-Sqlcmd -ServerInstance $sqlServerName -Query $grantSql -Database $targetDbName

批量授权场景说明

如果需要给同一用户授予多个数据库的连接权限,遍历数据库列表执行上述逻辑即可:

# 替换为需要授权的数据库列表
$dbList = @("DB1", "DB2", "DB3")
foreach($db in $dbList){
    $grantSql = "GRANT CONNECT ON DATABASE::[$db] TO [$loginName]"
    Invoke-Sqlcmd -ServerInstance $sqlServerName -Query $grantSql -Database $db
}

注意:运行上述脚本的账号需要具备SQL Server的对应数据库所有者权限、或ALTER ANY USER的服务器级权限,才能正常执行授权操作。

内容的提问来源于stack exchange,提问作者bsc-jg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 00:15:06