mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-07-31 18:20:40 +00:00
* feat: support SCRAM auth for Postgres Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * feat: add pg_scram_sha256 format to hash-password command Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * fix: harden Postgres SCRAM auth - Verify the client-final nonce matches the server-issued nonce, per RFC 5802 transcript validation, instead of only checking the channel-binding field. - Replace the per-connection PBKDF2 over a random password for unknown users with a deterministic mock verifier keyed by the username and a process-wide secret. This avoids a CPU-exhaustion DoS on unknown usernames and removes a username-enumeration oracle: the SCRAM server-first salt and iteration count are now stable per username and indistinguishable from a real user, with no PBKDF2 cost and random keys that never accept a proof. Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * style: format PG_SCRAM_MOCK_SECRET declaration Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * fix: precompute stable SCRAM verifier for plaintext users Plaintext-backed credentials derived a Postgres SCRAM verifier on the fly on every connection, using a fresh random salt and running PBKDF2 each time. That made a known plaintext user distinguishable from stored-hash and unknown (mock) users through both the unstable server-first salt and the per-connection timing, enabling username enumeration. Precompute the SCRAM verifier once at load time (stable salt, default iteration count) and reuse it, matching the mock verifier handed to unknown users. Document that non-default iteration counts remain observable in the SCRAM handshake and weaken enumeration resistance. Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * fix: normalize passwords for Postgres SCRAM Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * chore: docs Signed-off-by: Dennis Zhuang <killme2008@gmail.com> --------- Signed-off-by: Dennis Zhuang <killme2008@gmail.com>
383 lines
14 KiB
TOML
383 lines
14 KiB
TOML
[workspace]
|
|
members = [
|
|
"src/api",
|
|
"src/auth",
|
|
"src/cache",
|
|
"src/catalog",
|
|
"src/cli",
|
|
"src/client",
|
|
"src/cmd",
|
|
"src/common/base",
|
|
"src/common/catalog",
|
|
"src/common/config",
|
|
"src/common/datasource",
|
|
"src/common/decimal",
|
|
"src/common/error",
|
|
"src/common/event-recorder",
|
|
"src/common/frontend",
|
|
"src/common/function",
|
|
"src/common/greptimedb-telemetry",
|
|
"src/common/grpc",
|
|
"src/common/grpc-expr",
|
|
"src/common/macro",
|
|
"src/common/mem-prof",
|
|
"src/common/memory-manager",
|
|
"src/common/meta",
|
|
"src/common/options",
|
|
"src/common/plugins",
|
|
"src/common/pprof",
|
|
"src/common/procedure",
|
|
"src/common/procedure-test",
|
|
"src/common/query",
|
|
"src/common/recordbatch",
|
|
"src/common/runtime",
|
|
"src/common/session",
|
|
"src/common/sql",
|
|
"src/common/stat",
|
|
"src/common/substrait",
|
|
"src/common/telemetry",
|
|
"src/common/test-util",
|
|
"src/common/time",
|
|
"src/common/version",
|
|
"src/common/wal",
|
|
"src/common/workload",
|
|
"src/datanode",
|
|
"src/datatypes",
|
|
"src/file-engine",
|
|
"src/flow",
|
|
"src/frontend",
|
|
"src/index",
|
|
"src/log-query",
|
|
"src/log-store",
|
|
"src/meta-client",
|
|
"src/meta-srv",
|
|
"src/metric-engine",
|
|
"src/mito-codec",
|
|
"src/mito2",
|
|
"src/object-store",
|
|
"src/operator",
|
|
"src/partition",
|
|
"src/pipeline",
|
|
"src/plugins",
|
|
"src/promql",
|
|
"src/puffin",
|
|
"src/query",
|
|
"src/standalone",
|
|
"src/servers",
|
|
"src/session",
|
|
"src/sql",
|
|
"src/store-api",
|
|
"src/table",
|
|
"tests-fuzz",
|
|
"tests-integration",
|
|
"tests/runner",
|
|
]
|
|
resolver = "2"
|
|
|
|
[workspace.package]
|
|
version = "1.2.0"
|
|
edition = "2024"
|
|
license = "Apache-2.0"
|
|
|
|
[workspace.lints]
|
|
clippy.print_stdout = "warn"
|
|
clippy.print_stderr = "warn"
|
|
clippy.dbg_macro = "warn"
|
|
clippy.implicit_clone = "warn"
|
|
clippy.result_large_err = "allow"
|
|
clippy.large_enum_variant = "allow"
|
|
clippy.doc_overindented_list_items = "allow"
|
|
clippy.uninlined_format_args = "allow"
|
|
rust.unknown_lints = "deny"
|
|
rust.unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tokio_unstable)'] }
|
|
|
|
[workspace.dependencies]
|
|
# DO_NOT_REMOVE_THIS: BEGIN_OF_EXTERNAL_DEPENDENCIES
|
|
# We turn off default-features for some dependencies here so the workspaces which inherit them can
|
|
# selectively turn them on if needed, since we can override default-features = true (from false)
|
|
# for the inherited dependency but cannot do the reverse (override from true to false).
|
|
#
|
|
# See for more detaiils: https://github.com/rust-lang/cargo/issues/11329
|
|
ahash = { version = "0.8", features = ["compile-time-rng"] }
|
|
aquamarine = "0.6"
|
|
arrow = { version = "58.3", features = ["prettyprint"] }
|
|
arrow-array = { version = "58.3", default-features = false, features = ["chrono-tz"] }
|
|
arrow-buffer = "58.3"
|
|
arrow-cast = "58.3"
|
|
arrow-flight = "58.3"
|
|
arrow-ipc = { version = "58.3", default-features = false, features = ["lz4", "zstd"] }
|
|
arrow-schema = { version = "58.3", features = ["serde"] }
|
|
async-stream = "0.3"
|
|
async-trait = "0.1"
|
|
# Remember to update axum-extra, axum-macros when updating axum
|
|
axum = "0.8"
|
|
axum-extra = "0.10"
|
|
axum-macros = "0.5"
|
|
backon = "1"
|
|
base64 = "0.22"
|
|
bigdecimal = "0.4.2"
|
|
bitflags = "2.4.1"
|
|
bytemuck = "1.12"
|
|
bytes = { version = "1.11", features = ["serde"] }
|
|
chrono = { version = "0.4", features = ["serde"] }
|
|
chrono-tz = { version = "0.10", features = ["case-insensitive"] }
|
|
clap = { version = "4.4", features = ["derive"] }
|
|
config = "0.13.0"
|
|
const_format = "0.2"
|
|
criterion = "0.7"
|
|
crossbeam-utils = "0.8"
|
|
dashmap = "6.1"
|
|
datafusion = "=53.1.0"
|
|
datafusion-common = "=53.1.0"
|
|
datafusion-datasource = "=53.1.0"
|
|
datafusion-expr = "=53.1.0"
|
|
datafusion-expr-common = "=53.1.0"
|
|
datafusion-functions = "=53.1.0"
|
|
datafusion-functions-aggregate-common = "=53.1.0"
|
|
datafusion-functions-window-common = "=53.1.0"
|
|
datafusion-optimizer = "=53.1.0"
|
|
datafusion-orc = { git = "https://github.com/datafusion-contrib/datafusion-orc.git", rev = "6c07fa282dc8d62db2aa4ded06ab55485efc811a" }
|
|
datafusion-pg-catalog = "0.17.3"
|
|
datafusion-physical-expr = "=53.1.0"
|
|
datafusion-physical-plan = "=53.1.0"
|
|
datafusion-proto = "=53.1.0"
|
|
datafusion-sql = "=53.1.0"
|
|
datafusion-substrait = "=53.1.0"
|
|
datafusion_object_store = { package = "object_store", version = "0.13.2" }
|
|
deadpool = "0.12"
|
|
deadpool-postgres = "0.14"
|
|
derive_builder = "0.20"
|
|
derive_more = { version = "2.1", features = ["full"] }
|
|
dotenv = "0.15"
|
|
either = "1.15"
|
|
etcd-client = { version = "0.17", features = [
|
|
"tls",
|
|
"tls-roots",
|
|
] }
|
|
fs2 = "0.4"
|
|
fst = "0.4.7"
|
|
futures = "0.3"
|
|
futures-util = "0.3"
|
|
greptime-proto = { git = "https://github.com/GreptimeTeam/greptime-proto.git", rev = "c6f92ee9e12ee7bd5ee3c0956b1c9caa39be3f76" }
|
|
hex = "0.4"
|
|
http = "1"
|
|
humantime = "2.1"
|
|
humantime-serde = "1.1"
|
|
hyper = "1.1"
|
|
hyper-util = "0.1"
|
|
icu_properties = "2.0.1"
|
|
indicatif = "0.17"
|
|
itertools = "0.14"
|
|
jsonb = { version = "0.4.4", default-features = false }
|
|
lazy_static = "1.4"
|
|
local-ip-address = "0.6"
|
|
loki-proto = { git = "https://github.com/GreptimeTeam/loki-proto.git", rev = "f69c8924c4babe516373e26a4118be82d976629c" }
|
|
meter-core = { git = "https://github.com/GreptimeTeam/greptime-meter.git", rev = "5618e779cf2bb4755b499c630fba4c35e91898cb" }
|
|
mockall = "0.13"
|
|
moka = "0.12"
|
|
nalgebra = "0.33"
|
|
nix = { version = "0.30.1", default-features = false, features = ["event", "fs", "process"] }
|
|
notify = "8.0"
|
|
num_cpus = "1.16"
|
|
object_store_opendal = "0.57"
|
|
once_cell = "1.18"
|
|
opentelemetry-proto = { version = "0.31", features = [
|
|
"gen-tonic",
|
|
"metrics",
|
|
"trace",
|
|
"with-serde",
|
|
"logs",
|
|
] }
|
|
ordered-float = { version = "4.3", features = ["serde"] }
|
|
otel-arrow-rust = { git = "https://github.com/GreptimeTeam/otel-arrow", rev = "5da284414e9b14f678344b51e5292229e4b5f8d2", features = [
|
|
"server",
|
|
] }
|
|
parking_lot = "0.12"
|
|
parquet = { version = "58.3", default-features = false, features = ["arrow", "async", "object_store"] }
|
|
paste = "1.0"
|
|
pin-project = "1.0"
|
|
pretty_assertions = "1.4.0"
|
|
prometheus = { version = "0.14", features = ["process"] }
|
|
promql-parser = { version = "0.10.0", features = ["ser"] }
|
|
prost = { version = "0.14", features = ["no-recursion-limit"] }
|
|
prost-types = "0.14"
|
|
raft-engine = { version = "0.4.1", default-features = false }
|
|
rand = "0.9"
|
|
ratelimit = "0.10"
|
|
regex = "1.12"
|
|
regex-automata = "0.4"
|
|
reqwest = { version = "0.13", default-features = false, features = [
|
|
"form",
|
|
"json",
|
|
"query",
|
|
"rustls",
|
|
"stream",
|
|
"multipart",
|
|
] }
|
|
url = "2.3"
|
|
# Branch: feat/request-timeout
|
|
hostname = "0.4.0"
|
|
rskafka = { git = "https://github.com/GreptimeTeam/rskafka.git", rev = "f5688f83e7da591cda3f2674c2408b4c0ed4ed50", features = [
|
|
"transport-tls",
|
|
] }
|
|
rstest = "0.25"
|
|
rstest_reuse = "0.7"
|
|
rust_decimal = "1.33"
|
|
rustc-hash = "2.0"
|
|
rustls = { version = "0.23.25", default-features = false }
|
|
sea-query = "0.32"
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
serde_json = { version = "1.0", features = ["float_roundtrip"] }
|
|
serde_with = "3"
|
|
simd-json = "0.15"
|
|
similar-asserts = "1.6.0"
|
|
smallvec = { version = "1", features = ["serde"] }
|
|
snafu = "0.8"
|
|
sqlparser = { version = "0.61.0", default-features = false, features = ["std", "visitor", "serde"] }
|
|
sqlx = { version = "0.8", default-features = false, features = [
|
|
"any",
|
|
"macros",
|
|
"json",
|
|
"runtime-tokio",
|
|
"tls-rustls-aws-lc-rs",
|
|
"rust_decimal",
|
|
] }
|
|
stringprep = "0.1"
|
|
strum = { version = "0.27", features = ["derive"] }
|
|
sysinfo = "0.33"
|
|
tempfile = "3"
|
|
tokio = { version = "1.47", features = ["full"] }
|
|
tokio-postgres = "0.7"
|
|
tokio-rustls = { version = "0.26.2", default-features = false }
|
|
tokio-stream = "0.1"
|
|
tokio-util = { version = "0.7", features = ["io-util", "compat"] }
|
|
toml = "0.8.8"
|
|
# Pin below 0.14.5 to avoid the `connection_timeout_future` "async fn resumed after
|
|
# completion" panic (greptimedb#8265 / grpc-rust#2522). Remove once tonic ships a fix.
|
|
tonic = { version = "0.14, <0.14.5", features = ["tls-aws-lc", "gzip", "zstd"] }
|
|
tower = "0.5"
|
|
tower-http = "0.6"
|
|
tracing = "0.1"
|
|
tracing-appender = "0.2"
|
|
tracing-opentelemetry = "0.31.0"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter", "json", "fmt"] }
|
|
typetag = "0.2"
|
|
uuid = { version = "1.17", features = ["serde", "v4", "v7", "fast-rng"] }
|
|
vrl = "0.33"
|
|
zstd = "0.13"
|
|
# DO_NOT_REMOVE_THIS: END_OF_EXTERNAL_DEPENDENCIES
|
|
|
|
## workspaces members
|
|
api = { path = "src/api" }
|
|
auth = { path = "src/auth" }
|
|
cache = { path = "src/cache" }
|
|
catalog = { path = "src/catalog" }
|
|
cli = { path = "src/cli" }
|
|
client = { path = "src/client" }
|
|
cmd = { path = "src/cmd", default-features = false }
|
|
common-base = { path = "src/common/base" }
|
|
common-catalog = { path = "src/common/catalog" }
|
|
common-config = { path = "src/common/config" }
|
|
common-datasource = { path = "src/common/datasource" }
|
|
common-decimal = { path = "src/common/decimal" }
|
|
common-error = { path = "src/common/error" }
|
|
common-event-recorder = { path = "src/common/event-recorder" }
|
|
common-frontend = { path = "src/common/frontend" }
|
|
common-function = { path = "src/common/function" }
|
|
common-greptimedb-telemetry = { path = "src/common/greptimedb-telemetry" }
|
|
common-grpc = { path = "src/common/grpc" }
|
|
common-grpc-expr = { path = "src/common/grpc-expr" }
|
|
common-macro = { path = "src/common/macro" }
|
|
common-mem-prof = { path = "src/common/mem-prof" }
|
|
common-memory-manager = { path = "src/common/memory-manager" }
|
|
common-meta = { path = "src/common/meta" }
|
|
common-options = { path = "src/common/options" }
|
|
common-plugins = { path = "src/common/plugins" }
|
|
common-pprof = { path = "src/common/pprof" }
|
|
common-procedure = { path = "src/common/procedure" }
|
|
common-procedure-test = { path = "src/common/procedure-test" }
|
|
common-query = { path = "src/common/query" }
|
|
common-recordbatch = { path = "src/common/recordbatch" }
|
|
common-runtime = { path = "src/common/runtime" }
|
|
common-session = { path = "src/common/session" }
|
|
common-sql = { path = "src/common/sql" }
|
|
common-stat = { path = "src/common/stat" }
|
|
common-telemetry = { path = "src/common/telemetry" }
|
|
common-test-util = { path = "src/common/test-util" }
|
|
common-time = { path = "src/common/time" }
|
|
common-version = { path = "src/common/version" }
|
|
common-wal = { path = "src/common/wal" }
|
|
common-workload = { path = "src/common/workload" }
|
|
datanode = { path = "src/datanode" }
|
|
datatypes = { path = "src/datatypes" }
|
|
file-engine = { path = "src/file-engine" }
|
|
flow = { path = "src/flow" }
|
|
frontend = { path = "src/frontend", default-features = false }
|
|
index = { path = "src/index" }
|
|
log-query = { path = "src/log-query" }
|
|
log-store = { path = "src/log-store" }
|
|
meta-client = { path = "src/meta-client" }
|
|
meta-srv = { path = "src/meta-srv" }
|
|
metric-engine = { path = "src/metric-engine" }
|
|
mito-codec = { path = "src/mito-codec" }
|
|
mito2 = { path = "src/mito2" }
|
|
object-store = { path = "src/object-store" }
|
|
operator = { path = "src/operator" }
|
|
partition = { path = "src/partition" }
|
|
pipeline = { path = "src/pipeline" }
|
|
plugins = { path = "src/plugins" }
|
|
promql = { path = "src/promql" }
|
|
puffin = { path = "src/puffin" }
|
|
query = { path = "src/query" }
|
|
servers = { path = "src/servers" }
|
|
session = { path = "src/session" }
|
|
sql = { path = "src/sql" }
|
|
standalone = { path = "src/standalone" }
|
|
store-api = { path = "src/store-api" }
|
|
substrait = { path = "src/common/substrait" }
|
|
table = { path = "src/table" }
|
|
|
|
[workspace.dependencies.meter-macros]
|
|
git = "https://github.com/GreptimeTeam/greptime-meter.git"
|
|
rev = "5618e779cf2bb4755b499c630fba4c35e91898cb"
|
|
|
|
[patch.crates-io]
|
|
datafusion = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7a84c45104d35408f00bbf880268c47193b73b28" }
|
|
datafusion-common = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7a84c45104d35408f00bbf880268c47193b73b28" }
|
|
datafusion-datasource = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7a84c45104d35408f00bbf880268c47193b73b28" }
|
|
datafusion-expr = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7a84c45104d35408f00bbf880268c47193b73b28" }
|
|
datafusion-expr-common = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7a84c45104d35408f00bbf880268c47193b73b28" }
|
|
datafusion-functions = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7a84c45104d35408f00bbf880268c47193b73b28" }
|
|
datafusion-functions-aggregate-common = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7a84c45104d35408f00bbf880268c47193b73b28" }
|
|
datafusion-functions-window-common = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7a84c45104d35408f00bbf880268c47193b73b28" }
|
|
datafusion-optimizer = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7a84c45104d35408f00bbf880268c47193b73b28" }
|
|
datafusion-physical-expr = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7a84c45104d35408f00bbf880268c47193b73b28" }
|
|
datafusion-physical-expr-common = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7a84c45104d35408f00bbf880268c47193b73b28" }
|
|
datafusion-physical-plan = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7a84c45104d35408f00bbf880268c47193b73b28" }
|
|
datafusion-proto = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7a84c45104d35408f00bbf880268c47193b73b28" }
|
|
datafusion-sql = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7a84c45104d35408f00bbf880268c47193b73b28" }
|
|
datafusion-substrait = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7a84c45104d35408f00bbf880268c47193b73b28" }
|
|
sqlparser = { git = "https://github.com/GreptimeTeam/sqlparser-rs.git", rev = "2aefa08a8d69c96eec2d6d6703598a009bba6e4c" } # on branch v0.61.x
|
|
|
|
[profile.release]
|
|
debug = 1
|
|
|
|
[profile.nightly]
|
|
inherits = "release"
|
|
strip = "debuginfo"
|
|
lto = "thin"
|
|
debug = false
|
|
incremental = false
|
|
|
|
[profile.ci]
|
|
inherits = "dev"
|
|
strip = true
|
|
|
|
[profile.dev.package.sqlness-runner]
|
|
debug = false
|
|
strip = true
|
|
|
|
[profile.dev.package.tests-fuzz]
|
|
debug = false
|
|
strip = true
|