c++11 - MS ACCESS 中的 GRANT 支持

标签 c++11 ms-access odbc sql-grant

全部,

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/

相关文章:

c++ - 你如何静态断言可变参数模板的参数包中的值?

sql - 名称错误的无效括号

odbc - 从 Teradata 12 升级到 Teradata 13 后出错....terasso.dll

java - 如何在Apache Drill中实现Mongo Storage Plugin的INNER JOINS(下推)优化?

c++ - 可以在 C++11 中模拟 std::is_invocable 吗?

c++ - 如何在 C++11 的内存池中分配 std::map 的内部 RB_tree 节点?

c++ - 使用 initializer_list 的模糊重载解析

c# - 更新 ExceptionNonQuery

excel - 如何从Excel VBA代码触发Access数据库表单中的点击

c# - Odbc Paradox 驱动程序 WHERE 子句 日期