【问题标题】:Exception when trying to create a new SQL account尝试创建新 SQL 帐户时出现异常
【发布时间】:2016-05-19 21:15:39
【问题描述】:

当我尝试将新登录名添加到我的 SQL 服务器时,我总是收到此错误。 我在网上搜索了它,我在 StackOverflow 上找到了这个 Add Windows User to local SQL Server with PowerShell 但这并没有解决它。

这是错误

使用“1”参数调用“Create”的异常:“登录 'bilal' 的创建失败。”

这是我的代码

$server="WIN-SH7H3HP7KMI\SQL2014"
$User="bilal"
$password="test"

if(!($svr.Logins.Contains($User)))
{

    $login = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Login -ArgumentList $server, $User
    $login.LoginType = [Microsoft.SqlServer.Management.Smo.LoginType]::SqlLogin
    $login.PasswordExpirationEnabled = $false
    $login.Create($password)
    Write-Host("Login $loginName created successfully.")
}

【问题讨论】:

  • SQL 实例是否有更多关于失败原因的详细信息?也许有密码限制。您是否也有权创建这些帐户?
  • 不,这是我得到的唯一错误
  • 您确定该用户尚未通过迁移任务或测试创建? beansoftware.com/T-SQL-FAQ/create-failed-for-user.aspx。您的 if 语句仍然可以评估为 null 触发子句。由于我们没有看到 $svr 声明我想确定。
  • @Matt 我把我的整个脚本放在下面

标签: sql-server powershell


【解决方案1】:

@Matt 这是漏洞脚本 因为它给了我更多的错误,谁看起来像我在我的问题中显示的错误我只是专注于那个错误

$server="WIN-SH7H3HP7KMI\SQL2014"
$Database="master"
$User="bilal"
$Role="db_owner"

$Svr = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $server

# create new database and add to server
#     [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO')
#$srv=new-Object Microsoft.SqlServer.Management.Smo.Server('(local)\Test')
#$db=New-Object  Microsoft.SqlServer.Management.Smo.Database($srv,'Test_SMO_Database')
#$db.Create()

#Check Database Name entered correctly
$db = $svr.Databases[$Database]
if($db -eq $null)
    {
    Write-Host " $Database is not a valid database on $Server"
    Write-Host " Databases on $Server are :"
    $svr.Databases|select name
    break
    }
 #Check Role exists on Database
    $Rol = $db.Roles[$Role]
if($Rol -eq $null)
    {
    Write-Host " $Role is not a valid Role on $Database on $Server  "
    Write-Host " Roles on $Database are:"
    $db.roles|select name
    break
    }
if(!($svr.Logins.Contains($User)))
    {
    $password="test"
    $login = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Login -ArgumentList $server, $User
    $login.LoginType = [Microsoft.SqlServer.Management.Smo.LoginType]::SqlLogin
    $login.PasswordExpirationEnabled = $false
    $login.Create($password)
    Write-Host("Login $loginName created successfully.")


    }
if (!($db.Users.Contains($User)))
    {
    # Add user to database

    $usr = New-Object ('Microsoft.SqlServer.Management.Smo.User') ($db, $User)
    $usr.Login = $User
    $usr.Create()

    #Add User to the Role
    $Rol = $db.Roles[$Role]
    $Rol.AddMember($User)
    Write-Host "$User was not a login on $Database on $server"
    Write-Host "$User added to $Database on $Server and $Role Role"
    }
    else
    {
     #Add User to the Role
    $Rol = $db.Roles[$Role]
    $Rol.AddMember($User)
    Write-Host "$User added to $Role Role in $Database on $Server "
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    相关资源
    最近更新 更多