Benutzer-Werkzeuge

Webseiten-Werkzeuge


microsoft_sql_server

Microsoft SQL Server ist ein von Microsoft entwickelter Datenbank Server.

Query to CSV Export

SELECT @@SERVERNAME         AS ServerName,
       SERVERPROPERTY('MachineName') AS MachineName,
       SERVERPROPERTY('InstanceName') AS InstanceName,
       SERVERPROPERTY('Edition') AS Edition,
       SERVERPROPERTY('ProductVersion') AS ProductVersion,
       SERVERPROPERTY('ProductLevel') AS ProductLevel;
Get-Service | Where-Object { $_.Name -like "MSSQL*" }
sqlcmd -L
osql -L
sqllocaldb info

Server umbenennen

  • Server aus der Domäne raus
  • Server umbenennen
  • Server wieder joinen
Oder ohne Rejoin
netdom renamecomputer %computername% /newname:NEUERNAME /userd:DOMÄNE\Admin /passwordd:*

Danach den Servernamen in SQL Server umbenennen.

Default Instance

SELECT @@SERVERNAME; 
 
EXEC sp_dropserver 'OldServerName';
GO
 
EXEC sp_addserver 'NewServerName', 'local';
GO
 
-- SQL-Server-Dienst neu starten

Named Instance

SELECT @@SERVERNAME;
 
EXEC sp_dropserver 'OldServerName\InstanceName';
GO
 
EXEC sp_addserver 'NewServerName\InstanceName', 'local';
GO
 
-- SQL-Server-Dienst neu starten

Auth

Teste ob Kerberos oder NTLM benutzt wird.

SELECT auth_scheme 
FROM sys.dm_exec_connections 
WHERE session_id = @@SPID;

Gruppenmitgliedschaften & explizite DENY prüfen Wenn der Zugriff über eine AD-Gruppe kommen soll: Ist der User in der Gruppe? Ist die Gruppe als Login vorhanden und in der DB berechtigt? Prüfe auch, ob irgendwo „DENY CONNECT SQL“ gesetzt wurde:

SELECT sp.name, sp.type_desc, perm.state_desc, perm.permission_name
FROM sys.server_permissions perm
JOIN sys.server_principals sp ON perm.grantee_principal_id = sp.principal_id
WHERE sp.name IN (N'DOMÄNE\serviceuser', N'DOMÄNE\DeineGruppe');

Code

#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <iostream>
#include <string>
 
static void check(SQLRETURN rc, SQLHANDLE handle, SQLSMALLINT type, const char* msg) {
    if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) return;
 
    SQLCHAR state[6]{};
    SQLINTEGER nativeErr = 0;
    SQLCHAR text[256]{};
    SQLSMALLINT len = 0;
 
    if (SQLGetDiagRecA(type, handle, 1, state, &nativeErr, text, sizeof(text), &len) == SQL_SUCCESS) {
        std::cerr << msg << " | SQLSTATE=" << state << " native=" << nativeErr
                  << " text=" << text << "\n";
    } else {
        std::cerr << msg << " | (no diagnostics)\n";
    }
    std::exit(1);
}
 
int main() {
 
    SQLHENV env = SQL_NULL_HENV;
    SQLHDBC dbc = SQL_NULL_HDBC;
    SQLHSTMT stmt = SQL_NULL_HSTMT;
 
    // 1) Environment
    check(SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env), env, SQL_HANDLE_ENV, "Alloc ENV");
    check(SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0), env, SQL_HANDLE_ENV, "Set ODBC version");
 
    // 2) Connection
    check(SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc), dbc, SQL_HANDLE_DBC, "Alloc DBC");
 
    // Beispiel: SQL Login (User/Pass). Für Windows Integrated Security siehe unten.
    std::string conn =
        //"Driver={ODBC Driver 18 for SQL Server};"
	"Driver={SQL Server};"
        //"Server=tcp:VIE-CLU-SQL04\\SEMACORE,1433;"
	"Server=VIE-CLU-SQL04\\SEMACORE;"
        "Database=AUDIT_DATA;"
        "Uid=admin;"
        "Pwd=W@s1dochnet!;"
        //"Encrypt=yes;"
        "TrustServerCertificate=yes;"; // in Produktion eher "no" + korrektes Zertifikat
 
    SQLCHAR outConn[1024];
    SQLSMALLINT outLen = 0;
    check(SQLDriverConnectA(dbc, NULL,
                            (SQLCHAR*)conn.c_str(), SQL_NTS,
                            outConn, sizeof(outConn), &outLen,
                            SQL_DRIVER_COMPLETE),
          dbc, SQL_HANDLE_DBC, "Connect");
 
    // 3) Query
    check(SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt), stmt, SQL_HANDLE_STMT, "Alloc STMT");
 
    const char* sql = "SELECT TOP (5) name FROM sys.databases ORDER BY name";
    check(SQLExecDirectA(stmt, (SQLCHAR*)sql, SQL_NTS), stmt, SQL_HANDLE_STMT, "Exec");
 
    // 4) Results lesen (1. und 3. Spalte als Text)
    char id[256];
    SQLLEN idInd = 0;
    char name[256];
    SQLLEN nameInd = 0;
    check(SQLBindCol(stmt, 3, SQL_C_CHAR, name, sizeof(name), &nameInd), stmt, SQL_HANDLE_STMT, "BindCol");
    check(SQLBindCol(stmt, 1, SQL_C_CHAR, id, sizeof(id), &idInd), stmt, SQL_HANDLE_STMT, "BindCol");
 
    while (SQLFetch(stmt) == SQL_SUCCESS) {
        std::cout << id << " == " << name << "\n";
    }
 
    // 5) Cleanup
    SQLFreeHandle(SQL_HANDLE_STMT, stmt);
    SQLDisconnect(dbc);
    SQLFreeHandle(SQL_HANDLE_DBC, dbc);
    SQLFreeHandle(SQL_HANDLE_ENV, env);
}
g++ -static-libgcc -static-libstdc++ -std=c++17 -O2 -Wall main.cpp -o mssql.exe -lodbc32

Downloads

microsoft_sql_server.txt · Zuletzt geändert: 2025/12/10 10:31 von jango