Microsoft SQL Server ist ein von Microsoft entwickelter Datenbank Server.
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
netdom renamecomputer %computername% /newname:NEUERNAME /userd:DOMÄNE\Admin /passwordd:*
Danach den Servernamen in SQL Server umbenennen.
SELECT @@SERVERNAME; EXEC sp_dropserver 'OldServerName'; GO EXEC sp_addserver 'NewServerName', 'local'; GO -- SQL-Server-Dienst neu starten
SELECT @@SERVERNAME; EXEC sp_dropserver 'OldServerName\InstanceName'; GO EXEC sp_addserver 'NewServerName\InstanceName', 'local'; GO -- SQL-Server-Dienst neu starten
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');
#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