C # создать ODBC пользователя без разрешения администратора - PullRequest
0 голосов
/ 21 октября 2018

Я создаю odbc из кода C #, используя код ниже:

string ODBC_PATH = "SOFTWARE\\ODBC\\ODBC.INI\\"; 
string driverName = "SQL Server";
string dsnName = "DSNName";
string database = "DBName";
string description = "Description";
string server = "Server";
bool trustedConnection = false;
string driverPath = "C:\\WINDOWS\\System32\\sqlsrv32.dll"; 

var datasourcesKey = Registry.LocalMachine.CreateSubKey(ODBC_PATH + "ODBC Data Sources");         
if (datasourcesKey == null) 
{
    throw new Exception("ODBC Registry key does not exist"); 
}        
datasourcesKey.SetValue(dsnName, driverName);          
var dsnKey = Registry.LocalMachine.CreateSubKey(ODBC_PATH + dsnName);        
if (dsnKey == null) 
{
    throw new Exception("DSN was not created"); 
}        

dsnKey.SetValue("Database", database);         
dsnKey.SetValue("Description", description);         
dsnKey.SetValue("Driver", driverPath);         
dsnKey.SetValue("LastUser", "sa");         
dsnKey.SetValue("Server", server);         
dsnKey.SetValue("Database", database);
dsnKey.SetValue("username", "sa");
dsnKey.SetValue("password", "sa");
dsnKey.SetValue("Trusted_Connection", trustedConnection ? "Yes" : "No");

Но выше код создает «Системный DNS».Я хотел бы создать «Пользователь DNS» без разрешения администратора.

1 Ответ

0 голосов
/ 21 октября 2018

Вам необходимо выполнить несколько шагов:

  • Сначала отключите UAC
  • Затем включите манифест UAC в свой исполняемый файл
  • Наконец запуститеваше приложение в качестве администратора (Run as Administrator)

На основе MSDN :

Visual Studio® позволяет автоматически встраивать манифест приложения XMLфайл в разделе ресурсов образа Portable Executable (PE).В этом разделе описывается, как использовать Visual Studio для создания подписанного образа PE, содержащего манифест приложения.Следовательно, этот манифест приложения может включать необходимые атрибуты requiredExecutionLevel, позволяющие приложению работать с желаемым уровнем привилегий в Windows Vista.Когда программа запускается, информация манифеста приложения будет извлечена из раздела ресурсов PE и использована операционной системой.Для включения манифеста необязательно использовать графический пользовательский интерфейс (GUI) Visual Studio.После того, как необходимые изменения внесены в исходный код, компиляция и компоновка с использованием инструментов командной строки также будут включать манифест приложения в результирующий образ PE.

Файл манифеста Чтобы пометить ваше приложение требуемымExecutionLevel, сначала создайте приложение.файл манифеста для использования с целевым приложением.Этот файл может быть создан с помощью любого текстового редактора.Файл манифеста приложения должен иметь то же имя, что и целевой исполняемый файл с расширением .manifest.Например: IsUserAdmin.exe.manifest

Пример:

Executable: IsUserAdmin.exe 
Manifest:IsUserAdmin.exe.manifest
Sample application manifest file:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  <assemblyIdentity version="1.0.0.0"
     processorArchitecture="X86"
     name="IsUserAdmin"
     type="win32"/> 
  <description>Description of your application</description> 
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
  </trustInfo>
</assembly>
...