全部,
MS ACCESS 是否支持 GRANT
权限?
我正在使用 C++ 应用程序中的 ODBC 驱动程序连接到 accdb,并尝试发出 GRANT 命令,但收到一条错误消息,提示 expecting DELETE、INSERT、PROCEDURE、SELECT or UPDATE
。
它在带有 MSVC 2017 社区的 Windows 8.1 上。
我正在尝试的命令是:
GRANT SELECT ON MSysObjects TO Admin;
TIA!!
void uc_to_str_cpy(SQLWCHAR *dest, const std::wstring &src)
{
const wchar_t *temp = src.c_str();
while( *dest )
{
dest++;
}
while( *temp )
{
*dest = *temp;
dest++;
temp++;
}
*dest++ = 0;
*dest = 0;
}
std::wstring query8 = L"GRANT SELECT ON MSysObjects TO Admin;";
query = new SQLWCHAR[query8.length() + 2];
memset( query, '\0', query8.length() + 2 );
uc_to_str_cpy( query, query8 );
ret = SQLExecDirect( m_hstmt, query, SQL_NTS );
delete[] query;
query = NULL;
if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO )
{
GetErrorMessage( errorMsg, 1 );
result = 1;
}
最佳答案
对于 Access 确实存在授权。在大多数情况下,您可以查询 MSYSobjects。但是,您可以尝试几种方法:
首先,尝试以提升的权限运行您的程序 (.exe)(右键单击并以管理员身份运行)。
接下来。您没有提及这是 JET (mdb) 格式还是 ACE(accdb 格式)。
但是 - 据我所知,使用 ODBC(而不是 oleDB 驱动程序)不支持 Grant。所以,很确定你运气不好。
我想您可以考虑创建一个 ADO 对象。
我发现即使在 Access 内部,如果我使用内置的 ADO 对象,那么 grant 也会起作用。
但如果我直接使用 DAO 对象,那么它就不起作用。
对于 ODBC?好吧,我发现似乎不支持授权 - 所以,这看起来像 ODBC 不支持授权。
此外,在大多数情况下使用 GRANT 还意味着连接字符串需要包含工作组文件(默认情况下它是自动打开的 - 即使使用 ODBC,但针对此类数据库(来自 .net)使用 oleDB,我再次发现 GRANT 确实使用 oleDB 执行 - 但给出有关未指定工作组文件的错误消息。
但是,使用 ODBC - 我得到一个错误 - 语法。那么,在这一点上? ODBC 不支持授权 DDL。
关于c++11 - MS ACCESS 中的 GRANT 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65298815/