Commit 1e5d043
feat(bq_driver): add AllowedProjects DSN option to scope SQLTables
Power Query's Navigator opens a connection and immediately calls SQLTables
with wildcard catalog/schema arguments. GetFilteredProjectIds answered that
by enumerating every project the authenticated principal can reach via the
projects.list REST API, then listing datasets for each one.
In a large enterprise organization the principal can typically *see* far
more projects than it holds BigQuery permissions on. Listing datasets for
such a project fails with a permission error, and because
GetResultSetForDatasets surfaces the first error from its parallel fan-out,
one inaccessible project fails the whole SQLTables call. The result is that
the Navigator tree cannot be built at all, even though the user only wanted
the handful of projects they do have access to. Enumeration is also slow and
quota-heavy at that scale, but the permission failure is the blocking issue.
Add an AllowedProjects DSN option naming the projects to expose. When set,
GetFilteredProjectIds filters that list and skips projects.list entirely, so
no inaccessible project is ever contacted. The existing filter semantics are
preserved: entries are matched against the catalog argument with the same
LIKE pattern / SQL_ATTR_METADATA_ID rules used elsewhere.
AllowedProjects and AdditionalProjects stay orthogonal and composable: if
both are set, enumeration starts from the allowlist and still appends the
AdditionalProjects ids on top.
Also add a pick list to the Advanced Options dialog so non-technical users
need not hand-type project ids. "Load Projects" reuses the existing
DriverForm::GetCatalogAndDataset path to populate a checkbox list view,
preserving ticks across reloads and keeping saved ids the account no longer
reports. The DSN key remains usable headlessly for automation.
Tests: unit coverage for FilterAllowedProjects and ALLOWEDPROJECTS parsing,
a dialog round-trip test, and an integration test asserting that a project
the principal can reach but did not allow-list is absent from SQLTables.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>1 parent 59fdbb8 commit 1e5d043
17 files changed
Lines changed: 439 additions & 18 deletions
File tree
- google/cloud/odbc
- bq_driver
- internal
- integration_tests/odbc_driver_tests
Lines changed: 161 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| 16 | + | |
16 | 17 | | |
17 | 18 | | |
| 19 | + | |
18 | 20 | | |
19 | 21 | | |
20 | 22 | | |
| |||
53 | 55 | | |
54 | 56 | | |
55 | 57 | | |
| 58 | + | |
56 | 59 | | |
57 | 60 | | |
58 | 61 | | |
| |||
75 | 78 | | |
76 | 79 | | |
77 | 80 | | |
| 81 | + | |
78 | 82 | | |
79 | 83 | | |
80 | 84 | | |
| |||
97 | 101 | | |
98 | 102 | | |
99 | 103 | | |
100 | | - | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
101 | 109 | | |
102 | 110 | | |
103 | 111 | | |
| |||
428 | 436 | | |
429 | 437 | | |
430 | 438 | | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
431 | 458 | | |
432 | 459 | | |
433 | 460 | | |
| |||
443 | 470 | | |
444 | 471 | | |
445 | 472 | | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
446 | 544 | | |
447 | 545 | | |
448 | 546 | | |
| |||
639 | 737 | | |
640 | 738 | | |
641 | 739 | | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
642 | 743 | | |
643 | 744 | | |
644 | 745 | | |
| |||
770 | 871 | | |
771 | 872 | | |
772 | 873 | | |
| 874 | + | |
| 875 | + | |
| 876 | + | |
| 877 | + | |
| 878 | + | |
| 879 | + | |
| 880 | + | |
| 881 | + | |
| 882 | + | |
| 883 | + | |
| 884 | + | |
| 885 | + | |
| 886 | + | |
| 887 | + | |
| 888 | + | |
| 889 | + | |
| 890 | + | |
| 891 | + | |
| 892 | + | |
| 893 | + | |
| 894 | + | |
| 895 | + | |
| 896 | + | |
| 897 | + | |
| 898 | + | |
| 899 | + | |
| 900 | + | |
| 901 | + | |
| 902 | + | |
| 903 | + | |
| 904 | + | |
| 905 | + | |
| 906 | + | |
| 907 | + | |
| 908 | + | |
| 909 | + | |
| 910 | + | |
| 911 | + | |
| 912 | + | |
| 913 | + | |
| 914 | + | |
| 915 | + | |
| 916 | + | |
| 917 | + | |
| 918 | + | |
| 919 | + | |
| 920 | + | |
| 921 | + | |
| 922 | + | |
| 923 | + | |
| 924 | + | |
| 925 | + | |
| 926 | + | |
773 | 927 | | |
774 | 928 | | |
775 | 929 | | |
| |||
831 | 985 | | |
832 | 986 | | |
833 | 987 | | |
| 988 | + | |
834 | 989 | | |
835 | 990 | | |
836 | 991 | | |
| |||
858 | 1013 | | |
859 | 1014 | | |
860 | 1015 | | |
| 1016 | + | |
861 | 1017 | | |
862 | 1018 | | |
863 | 1019 | | |
| |||
884 | 1040 | | |
885 | 1041 | | |
886 | 1042 | | |
887 | | - | |
| 1043 | + | |
| 1044 | + | |
| 1045 | + | |
888 | 1046 | | |
889 | 1047 | | |
890 | 1048 | | |
891 | 1049 | | |
892 | 1050 | | |
893 | | - | |
| 1051 | + | |
894 | 1052 | | |
895 | 1053 | | |
896 | 1054 | | |
| |||
Lines changed: 17 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
23 | | - | |
| 23 | + | |
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
| |||
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
| 48 | + | |
| 49 | + | |
48 | 50 | | |
49 | 51 | | |
50 | 52 | | |
| |||
75 | 77 | | |
76 | 78 | | |
77 | 79 | | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
78 | 83 | | |
79 | 84 | | |
80 | 85 | | |
| |||
124 | 129 | | |
125 | 130 | | |
126 | 131 | | |
| 132 | + | |
127 | 133 | | |
128 | 134 | | |
129 | 135 | | |
| |||
137 | 143 | | |
138 | 144 | | |
139 | 145 | | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
140 | 156 | | |
141 | 157 | | |
142 | 158 | | |
| |||
Lines changed: 38 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
72 | 72 | | |
73 | 73 | | |
74 | 74 | | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
75 | 100 | | |
76 | 101 | | |
77 | 102 | | |
| |||
81 | 106 | | |
82 | 107 | | |
83 | 108 | | |
| 109 | + | |
84 | 110 | | |
85 | 111 | | |
86 | 112 | | |
| |||
96 | 122 | | |
97 | 123 | | |
98 | 124 | | |
| 125 | + | |
99 | 126 | | |
100 | 127 | | |
101 | 128 | | |
| |||
118 | 145 | | |
119 | 146 | | |
120 | 147 | | |
| 148 | + | |
121 | 149 | | |
122 | 150 | | |
123 | 151 | | |
124 | 152 | | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
125 | 163 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
223 | 223 | | |
224 | 224 | | |
225 | 225 | | |
| 226 | + | |
226 | 227 | | |
227 | 228 | | |
228 | 229 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
153 | 153 | | |
154 | 154 | | |
155 | 155 | | |
| 156 | + | |
156 | 157 | | |
157 | 158 | | |
158 | 159 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
103 | 103 | | |
104 | 104 | | |
105 | 105 | | |
| 106 | + | |
106 | 107 | | |
107 | 108 | | |
108 | 109 | | |
| |||
0 commit comments