2015-06-29 5 views
-5

Я новичок в силовой оболочке, и в нескольких блогах я читал, что в основном это предназначено для автоматизации. У меня есть требование, когда мне нужно создать отчет аудита для SQL, который должен показать, кто является пользователями конкретной базы данных. Это поможет мне удалить людей, которых больше нет в моей организации.Получить пользователей, связанных с Database

Формат что мне было нужно, как показано ниже:

DatabaseName Users Role/ Permission 
X   DEF Public 
X   ABC SYS Admin 
Y   DEF Public 

Я прошел через несколько блогов, и я могу подключить удаленную базу данных сервера, но я не знаю, как извлечь users.Can любой из посоветуйте мне можно ли автоматизировать этот отчет, используя оболочку оболочки, чтобы извлечь отчет.

Пожалуйста, дайте мне знать, если вам нужны какие-либо другие детали.

Благодарим за помощь.

+2

Просьба ознакомиться с [help] (http://stackoverflow.com/help/how-to-ask) о том, как задать хороший вопрос. В этом нет большого контекста. С какой именно проблемой возникают проблемы? Можете ли вы создать отчет с помощью ручных шагов? Можете ли вы подключиться к базе данных с помощью Powershell? – vonPryz

+0

Определите «связанные с базой данных». Вам нужен отчет о пользователях базы данных? Пользователи системы? И то и другое? И какая база данных (или, скорее, СУБД) в первую очередь? –

+0

Мне очень жаль, и я знаю, что ошибка с моей стороны. Вопрос был написан моим другом. Я сейчас редактировал этот вопрос. Надеюсь, теперь все в порядке. Как всегда спасибо за ваше руководство и советую. –

ответ

0
function SQL-Get-Logins 
{ 
    <# 
    .SYNOPSIS 
    Returns a list of SQL Server logins defined on the specified server/instance. 

    .DESCRIPTION 
    This function returns a complete list of all logins defined for the specified 
    server/instance, including the login type, the default database, and the server 
    role. 

    .PARAMETER server 
    The computer hosting SQL Server. 

    .PARAMETER instance 
    The instance to be used on that server. 

    .PARAMETER saPassword 
    The 'sa' password on that server\instance 

    .EXAMPLE 
    SQL-Get-Logins myserver myinstance sa | %{ Write-Host $_.LoginName } 
    #> 

    param (
     [parameter(Mandatory = $true)][string] $server, 
     [parameter(Mandatory = $false)][string] $instance = 'MSSQL', 
     [parameter(Mandatory = $true)][string] $saPassword 
    ) 

    $logins = $null 

    try 
    { 
     $query = @" 
     select a.name as LoginName, a.type_desc as LoginType, a.default_database_name as DefaultDBName, 
     case when b.sysadmin = 1 THEN 'sysadmin' 
        when b.securityadmin=1 THEN 'securityadmin' 
        when b.serveradmin=1 THEN 'serveradmin' 
        when b.setupadmin=1 THEN 'setupadmin' 
        when b.processadmin=1 THEN 'processadmin' 
        when b.diskadmin=1 THEN 'diskadmin' 
        when b.dbcreator=1 THEN 'dbcreator' 
        when b.bulkadmin=1 THEN 'bulkadmin' 
        else 'Public' end as ServerRole 
     from sys.server_principals a join master..syslogins b on a.sid=b.sid where a.type <> 'R' and a.name not like '##%' 
"@ 

     $sqlConnection = New-Object System.Data.SqlClient.SqlConnection 
     $sqlConnection.ConnectionString = "Server=$server\$instance;Database=master;User Id=sa;Password=$saPassword;Trusted_Connection=False;" 
     $adapter = New-Object System.Data.SqlClient.SqlDataAdapter ($query, $sqlConnection) 
     $dataSet = New-Object System.Data.Dataset 
     $adapter.Fill($dataSet) | Out-Null 

     $logins = $dataSet.Tables[0] 

     foreach ($login in $logins) 
     { 
      $loginName = $login.ItemArray[0] 
      $loginType = $login.ItemArray[1] 
      $defaultDbName = $login.ItemArray[2] 
      $serverRole = $login.ItemArray[3] 

      Write-Output "$($MyInvocation.InvocationName): LoginName: $loginName, LoginType: $loginType, Default database: $defaultDbName, Server Role: $serverRole" 
     } 
    } 

    catch 
    { 
     Write-Error "$($MyInvocation.InvocationName): $_" 
    } 

    return $logins 
} 
+0

Привет, Дэвид, Спасибо за ваше решение. Попробуй это, дайте знать. –

Смежные вопросы