Microsoft SQL Server ist ein von [[Microsoft]] entwickelter [[Datenbank]] Server.
[[https://www.dbvis.com/docs/12.0/working-with-sql/using-client-side-commands/export-export-query-result/|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
#include
#include
#include
#include
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=====
* [[https://www.microsoft.com/en-us/evalcenter/download-sql-server-2016|Windows SQL Server 2016]]
* [[https://www.microsoft.com/en-us/evalcenter/download-sql-server-2019|Windows SQL Server 2019]]
* [[https://www.microsoft.com/en-us/evalcenter/download-sql-server-2022|Windows SQL Server 2022]]
* [[https://download.microsoft.com/download/9/0/7/907AD35F-9F9C-43A5-9789-52470555DB90/ENU/SQLEXPR_x64_ENU.exe|Express Core]]
* [[https://download.microsoft.com/download/9/0/7/907AD35F-9F9C-43A5-9789-52470555DB90/ENU/SQLEXPRADV_x64_ENU.exe|Express Advanced]]