Как настроить имя пользователя и пароль memcached с поддержкой SASL на Mac

Я установил memcached версии 1.4.34 на свой Mac с помощью homebrew. Я хотел настроить имя пользователя и пароль, чтобы включить поддержку SASL при взаимодействии с memcache. Можете ли вы указать мне правильное направление для этого? Запустите команду ниже, чтобы установить memcache на Mac.

brew install memcached --enable-sasl-pwdb

Команда выше установила memcache с поддержкой sasl.

echo "mech_list: plain" > memcached.conf
echo "myuser:mypass" > /tmp/memcached-sasl-db
export MEMCACHED_SASL_PWDB=/tmp/memcached-sasl-db
export SASL_CONF_PATH=`pwd`/memcached.conf
memcached -u myuser -m 1024 -p 8010 -S -B binary -vvv

Initialized SASL.

Теперь, когда я подключаюсь через клиент memcache, он говорит, что проверка пароля не удалась на терминале.

mech:  ``PLAIN'' with 15 bytes of data
INFO: User <[email protected]> failed to authenticate
SASL (severity 2): Password verification failed
sasl result code:  -20
Unknown sasl response:  -20

Вот код Java, который я использую:

public class MemcacheTest {

public static void main(String[] args) {
    System.setProperty("net.spy.memcached.auth.AuthThreshold", "10");

    AuthDescriptor ad = new AuthDescriptor(new String[] { "PLAIN" },
            new PlainCallbackHandler(
                    "myuser", "mypass"));

    ConnectionFactory connFactory = new ConnectionFactoryBuilder()
            .setProtocol(ConnectionFactoryBuilder.Protocol.BINARY)
            .setAuthWaitTime(10000)
            .setOpTimeout(10000)
            .setShouldOptimize(true)
            .setAuthDescriptor(ad).build();

    List<InetSocketAddress> servers = AddrUtil
            .getAddresses("localhost:8010");
    MemcachedClient cacheClient = null;
    try {
        cacheClient = new MemcachedClient(connFactory, servers);
        cacheClient.set("foo", 50000, "bar");
        System.out.println("Value: " + cacheClient.get("foo"));
    } catch (IOException iox) {
        iox.printStackTrace();
    }
}

}

Вот мои журналы Intellij:

    2017-02-23 15:19:04.223 INFO net.spy.memcached.MemcachedConnection:  Reconnection due to exception handling a memcached operation on {QA sa=localhost/127.0.0.1:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=1}. This may be due to an authentication failure.
OperationException: SERVER: Auth failure.
    at net.spy.memcached.protocol.BaseOperationImpl.handleError(BaseOperationImpl.java:192)
    at net.spy.memcached.protocol.binary.OperationImpl.finishedPayload(OperationImpl.java:204)
    at net.spy.memcached.protocol.binary.SASLBaseOperationImpl.finishedPayload(SASLBaseOperationImpl.java:98)
    at net.spy.memcached.protocol.binary.OperationImpl.readPayloadFromBuffer(OperationImpl.java:196)
    at net.spy.memcached.protocol.binary.OperationImpl.readFromBuffer(OperationImpl.java:139)
    at net.spy.memcached.MemcachedConnection.readBufferAndLogMetrics(MemcachedConnection.java:861)
    at net.spy.memcached.MemcachedConnection.handleReads(MemcachedConnection.java:840)
    at net.spy.memcached.MemcachedConnection.handleReadsAndWrites(MemcachedConnection.java:720)
    at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:683)
    at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:436)
    at net.spy.memcached.MemcachedConnection.run(MemcachedConnection.java:1446)

person User5817351    schedule 23.02.2017    source источник
comment
@Koen, у тебя есть какие-нибудь указания на это?   -  person User5817351    schedule 24.02.2017
comment
@rastko у вас есть какие-нибудь указания на это?   -  person User5817351    schedule 24.02.2017


Ответы (1)


Ура! Я понял проблему. Базовый клиент Couch автоматически добавляет имя хоста в конце имени пользователя. В моем случае, когда я устанавливаю имя пользователя как myuser:mypassword, но когда я передаю myuser в своем java-коде, memcacheclient передает эту информацию как myuser@mylocalhost-mac, и именно здесь происходит несоответствие. Чтобы решить эту проблему, я добавил полное имя пользователя с локальным хостом ssl db.

Вместо нижней строки

echo "myuser:mypass" > /tmp/memcached-sasl-db

заменен на

echo "[email protected]:mypass" > /tmp/memcached-sasl-db

Теперь в java-клиенте я просто передаю myuser, и клиент автоматически добавляет имя хоста.

person User5817351    schedule 24.02.2017
comment
Круто! Я потратил на это всю ночь, даже думал сменить Linux на Mac, и, наконец, добрался сюда, когда был в полном отчаянии, спасибо! - person Azusa Nakano; 13.01.2019